我正在用Ruby on Rails構建家庭相冊應用程序。我有兩張主桌:「家庭」和「會員」。家庭has_many成員。Rails - 引用同一表的其他成員
當我創建一個「家庭」的新「成員」時,我試圖跟蹤與原始成員的新成員關係。我的應用程序允許您創建一個原始成員,然後所有其他成員必須從現有成員的顯示頁面創建。這個想法是不允許任何新成員在沒有與現有成員建立關係的情況下被添加到家庭中。這將避免與其他人無關的浮動成員。
我有一個名爲「parent_id」的列。當創建新成員時,可以將當前成員的id(表單在成員show view中)添加爲新成員的parent_id。這將鏈接記錄,以便稍後可以引用它們。
我的問題很簡單。在成員的show view中,我想要一個表來顯示所有擁有parent_id ==當前成員的id的成員。很簡單,但我無法實現它的工作。這是我現在有:
<table class="table table-striped">
<tr>
<td>First</td>
<td>Last</td>
<td>Birthplace</td>
</tr>
<% @members.where("parent_id == @member.id").each do |p| %>
<tr>
<td><%= p.first_name %></td>
<td><%= p.last_name %></td>
<td><%= p.birthplace %></td>
</tr>
<% end %>
</table>
這是此代碼拋出的錯誤:
SQLite3::SQLException: near ".": syntax error: SELECT "members".* FROM "members" WHERE "members"."family_id" = ? AND (parent_id == @member.id)
這裏是我的成員控制器的show動作:
def show
@family = Family.find(params[:family_id])
@member = Member.find(params[:id])
@new = Member.new
@members = @family.members
end
這裏是架構對於我的兩個表格:
create_table "families", force: :cascade do |t|
t.string "title"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "members", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "birthplace"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "family_id"
t.integer "parent_id"
t.integer "child_id"
t.integer "sibling_id"
end
你的域模型只是不會削減它。你需要一系列連接表,而不是僅僅試圖將所有內容都塞進兩個表中。例如,您的模型不允許成員擁有多個兄弟姐妹或屬於多個家庭。您需要閱讀自我參照關聯並返回到繪圖板。 – max