Rails 3更新连接表的属性(Has_many,通过关联)

时间:2012-06-19 20:39:44

标签: ruby-on-rails-3 activerecord has-many-through

我的模型有以下:has_many, :through关联:

小组模特:

has_many :group_users
has_many :users, :through => :group_users

用户型号:

has_many :group_users
has_many :groups, :before_add => :validates_group, :through => :group_users

GroupsUsers模型:

belongs_to :group
belongs_to :user

groups_users表中,我有一个额外的列,可以跟上用户状态(活动或非活动)。当用户从组中删除它时,我需要能够更新该列。如何在联接表上使用update_attributes

1 个答案:

答案 0 :(得分:2)

这有点奇怪,所以只是为了确定 - 通常你会删除组中的用户删除持有连接的groups_user记录。

如果您希望该记录保持不变并且只是标记为非活动状态,那么您说该用户将继续显示在该组的用户集合中,反之亦然。

假设确实是你想要的 - 记录可以像任何其他记录一样更新。您可以从用户或组端进入,然后照常编辑。

例如,对于用户u,group g,groups_user gu

gu = g.groups_users.where('user_id = ?',u.id) 
gu.update_attributes (:status => 'inactive')

另请注意,如果您这样做,那么当您只想要一个组的活动用户或用户的活动组时,可能会有很多次。有关如何在这种情况下执行此操作,请参阅此帖子:Rails has_many :through Find by Extra Attributes in Join Model