2009-08-17 85 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

相关问题