代码之家  ›  专栏  ›  技术社区  ›  Pavel K.

如何更新has-many:through-join-model属性?

  •  0
  • Pavel K.  · 技术社区  · 15 年前

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

    它们通过“has many:through=>groups”连接两个方向

    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_用户加入模型表并在id上对其进行索引?

    1 回复  |  直到 15 年前
        1
  •  5
  •   ryanb    15 年前

    是的,您应该创建一个 id 组用户表上的列。

    因为你在使用 has_many :through 联接表应具有 身份证件 列(自动递增的主键)。这是因为每个rails模型都需要一个id列,而join表有自己的模型(groupsuser)。顺便说一句,您可能需要将其重命名为类似于成员资格的名称)。

    多对多关联的另一种类型是 has_and_belongs_to_many . 我假设你是从这里迁移过来的,因为那是 使用 身份证件 联接表上的列。有关这两个关联的更多信息,请查看 Railscasts episode 关于这个话题。