0

我有一个模型组和模型用户

它们通过“has_many :through => groups_users”双向连接

groups_users 表有一个属性,称为 moderator,指定用户是否是组的主持人

当我尝试更新加入模块属性时,我出错了

我现在这样做的方式:

@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 上建立索引?

4

1 回答 1

5

是的,您应该在 groups_users 表上创建一个id列。

由于您使用has_many :through的是连接表,因此应该有一个id列(这是一个自动递增的主键)。这是因为每个 Rails 模型都需要一个 id 列,而连接表有自己的模型(GroupsUser)。顺便说一句,您可能想重命名为 Membership 之类的名称)。

另一种类型的多对多关联是has_and_belongs_to_many. 我假设您从这里迁移,因为它使用id连接表上的列。有关这两个关联的更多信息,请查看我关于此主题的Railscasts 集。

于 2009-08-17T17:44:34.493 回答