如何通过关联检测has_many中的更改?

问题描述 投票:1回答:2

我有以下型号。

class Company < ApplicationRecord
  has_many :company_users
  has_many :users, :through => :company_users

  after_update :do_something

  private

  def do_something
    # check if users of the company have been updated here
  end
end

class User < ApplicationRecord
  has_many :company_users
  has_many :companies, :through => :company_users
end

class CompanyUser < ApplicationRecord
  belongs_to :company
  belongs_to :user
end

然后我将这些作为种子:

Company.create :name => 'Company 1'
User.create [{:name => 'User1'}, {:name => 'User2'}, {:name => 'User3'}, {:name => 'User4'}]

假设我要更新Company 1用户,我将执行以下操作:

Company.first.update :users => [User.first, User.second]

这将按预期运行,并在CompanyUser模型上创建2条新记录。

但是如果我想再次更新怎么办?像运行以下命令:

Company.first.update :users => [User.third, User.fourth]

这将销毁前2条记录,并在CompanyUser模型上创建另外2条记录。

从技术上来说,我是[[0]更新过] Company模型,所以如何在after_update模型上使用Company方法检测这些变化?但是,更新属性可以正常工作:

Company.first.update :name => 'New Company Name'

我如何也可以在关联上使用它?

到目前为止,我已经尝试了以下方法,但无济于事:

  • 我有以下型号。类Company :company_users after_update:do_something private def ...
  • ruby-on-rails activerecord rails-activerecord has-many-through ruby-on-rails-6
    2个回答
    0
    投票
    我感觉您在问一个错误的问题,因为您必须在不破坏当前关联的情况下更新您的关联。如您所说:

    0
    投票
    您可以为此使用attr_accessor,并检查其是否更改。
    © www.soinside.com 2019 - 2024. All rights reserved.