2012-06-19 41 views
3

我有以下:has_many, :through协会对我的模型:Rails 3的更新属性的连接表(有很多,通过协会)

组型号:

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

用户型号:

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

群组用户型号:

belongs_to :group 
belongs_to :user 

groups_users表中,我有一个跟上用户状态(活动或非活动状态)的附加列。当用户从组中删除他们时,我需要能够更新该列。你如何在连接表上使用update_attributes

回答

2

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

如果您希望该记录保留并仅标记为非活动状态,则表示用户将继续显示在该组的用户集合中,反之亦然。

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

例如,对于用户u,G团,groups_user区

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

+0

Thanks @elc - 我不得不这样做的原因是帮助支持遗留系统,同时帮助支持一个系统,该系统运行主数据库的分析数据。 – dennismonsewicz