ActiveRecord提供更改跟踪,其中调用#name_changed?
返回true / false,具体取决于在加载模型和现在之间是否更改了name
属性。
协会有同等效力吗?我特意寻找has_many关联,但所有关联类型都很有用。
Rails 5.2,Ruby 2.5.1
答案 0 :(得分:0)
根据文档显示,在关联上没有#association_changed?
等效项。
https://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html
答案 1 :(得分:0)
好的,不是答案,但这是我想出的解决方法。
在我的项目中,我已经在使用gem audited
来跟踪我也希望接收更改的模型上的更改。在我的情况下,该模型为Location
,而我要检查位置是否已更改的模型为Employee
然后在after_save
中,检查是否对该位置进行了审核,以及是否在几秒钟内创建了该审核。如果是这样,我可以检查更改。
简化示例:
# app/models/location.rb
class Location < ApplicationRecord
audited
end
# app/models/employee.rb
class Employee < ApplicationRecord
after_save :inform_about_changes!
belongs_to :location
def inform_about_changes!
last_location_change = location.audits.last
if last_location_change.created_at.between?(2.seconds.ago, Time.now)
if last_location_change.audited_changes.include? 'city'
city_was = last_location_change.audited_changes[0]
end
end
end
end
再一次,这不是一个答案,但是就我而言,它确实起到了作用