如何更新has_many:通过在Rails中加入模型属性?
问题描述:
我有一个模型组和模型用户如何更新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?
答
是的,你应该在groups_users表上创建一个id
列。
由于您使用的是has_many :through
,所以连接表上应该有一个id
列(这是一个自动递增的主键)。这是因为每个Rails模型都需要一个id列,而连接表有它自己的模型(GroupsUser)。顺便说一句,你可能想重新命名为会员)。
其他类型的多对多关联是has_and_belongs_to_many
。我假设你是从此迁移的,因为不是在连接表上使用id
列。有关这两个关联的更多信息,请查看关于此主题的我的Railscasts episode。