我有一个模型组和模型用户
它们通过“has_many:through => groups_users”
连接到两个方向groups_users表有一个名为主持人的属性,指定用户是否是该组的主持人
当我尝试更新加入模块属性时,我得到一个错误
我现在正在这样做:
@group_membership=@group.groups_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?
答案 0 :(得分:5)
是的,您应该在groups_users表上创建一个id
列。
由于您使用的是has_many :through
,因此连接表上应该有一个id
列(这是一个自动递增的主键)。这是因为每个Rails模型都需要一个id列,而连接表有自己的模型(GroupsUser)。顺便说一句,您可能想要重命名为会员资格。
另一种类型的多对多关联是has_and_belongs_to_many
。我假设您已从此迁移,因为不会在联接表上使用id
列。有关这两个关联的更多信息,请查看关于此主题的Railscasts episode。