2009-08-17 83 views
0

我有一個模型組和模型用戶如何更新has_many:通過在Rails中加入模型屬性?

它們連接兩個方向用「的has_many:通過=> groups_users」

groups_users表有屬性,稱爲慢化劑,指定用戶是否是的主持人組

當我試圖更新加入模塊屬性,我得到了一個錯誤

方式我現在這樣做:

@[email protected]_users.find_by_user_id(@user.id) 

if @group_membership!=nil 
@group_membership.moderator=true 
else 
    @group_membership=GroupsUser.new(:user_id => @user.id, :group_id => @group.id, :moderator => true) 
end 

@group_membership.save 

代碼是生產mysql的錯誤:

Unknown column 'id' in 'where clause': UPDATE `groups_users` SET `moderator` = 1 WHERE `id` = NULL 

有沒有更好的方式來做到這一點或者我應該添加ID列到groups_users連接模型的表和索引它的ID?

回答

5

是的,你應該在groups_users表上創建一個id列。

由於您使用的是has_many :through,所以連接表上應該有一個id列(這是一個自動遞增的主鍵)。這是因爲每個Rails模型都需要一個id列,而連接表有它自己的模型(GroupsUser)。順便說一句,你可能想重新命名爲會員)。

其他類型的多對多關聯是has_and_belongs_to_many。我假設你是從此遷移的,因爲不是在連接表上使用id列。有關這兩個關聯的更多信息,請查看關於此主題的我的Railscasts episode

相關問題