3

我的模型有以下: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

组用户模型:

belongs_to :group
belongs_to :user

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

4

1 回答 1

2

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

如果您希望该记录持续存在并且只是标记为非活动状态,那么您的意思是该用户将继续出现在该组的用户集合中,反之亦然。

假设这确实是您想要的——该记录可以像任何其他记录一样更新。您可以从用户端或组端访问它,然后像往常一样进行编辑。

例如,对于用户 u,组 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

于 2012-06-19T21:50:26.317 回答