【问题标题】:Rails 3 Update Attributes for a Join Table (Has Many, Through Association)Rails 3 更新连接表的属性(有很多,通过关联)
【发布时间】:2012-06-21 23:15:58
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这有点奇怪,所以为了确定——通常你会通过删除持有连接的 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

    【讨论】:

    • 谢谢@elc - 我必须这样做的原因是为了帮助支持遗留系统以及帮助支持从我们的主数据库运行分析数据的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多