gpt4 book ai didi

ruby-on-rails - 如何通过关联检测has_many的变化?

转载 作者:行者123 更新时间:2023-12-02 02:41:04 29 4
gpt4 key购买 nike

我有以下模型。

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'}]

假设我想更新公司 1 的用户,我将执行以下操作:

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

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

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

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

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

问题是我在技术上“更新” Company 模型,所以如何使用 上的 after_update 方法检测这些更改公司模型?

但是,更新一个属性工作得很好:

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

如何让它也适用于关联?

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

最佳答案

在has_many关系上有一个集合回调before_add,after_add。

class Project
has_many :developers, after_add: :evaluate_velocity

def evaluate_velocity(developer)
#non persisted developer
...
end
end

更多详情:https://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Association+callbacks

关于ruby-on-rails - 如何通过关联检测has_many的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59424254/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com