Pav*_* K. 0 ruby-on-rails has-many-through
我有一个模型组和模型用户
它们通过"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
Run Code Online (Sandbox Code Playgroud)
代码正在产生mysql错误:
Unknown column 'id' in 'where clause': UPDATE `groups_users` SET `moderator` = 1 WHERE `id` = NULL
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,或者我应该将id列添加到groups_users连接模型表并将其索引到id?
是的,您应该id在groups_users表上创建一个列.
由于您使用的has_many :through是连接表,因此应该有一个id列(这是一个自动递增的主键).这是因为每个Rails模型都需要一个id列,而连接表有自己的模型(GroupsUser).顺便说一句,你可能想要重命名为会员资格.
另一种类型的多对多关联是has_and_belongs_to_many.我假设你从这个迁移,因为这并不能使用id在连接表列.有关这两个关联的更多信息,请查看有关此主题的Railscasts剧集.
| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |