Ruby on rails 检测现有ActiveRecord关联上的更改

Ruby on rails 检测现有ActiveRecord关联上的更改,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在编写一个ActiveRecord扩展,它需要知道何时修改关联。我知道通常我可以使用:after\u add和:after\u remove回调,但是如果关联已经声明了呢?正如您所说,您可以使用after\u add和after\u remove回调。另外为关联模型设置after_提交过滤器,并将更改通知父级 class User < ActiveRecord::Base has_many :articles, :after_add => :read, :after_remo

我正在编写一个ActiveRecord扩展,它需要知道何时修改关联。我知道通常我可以使用:after\u add和:after\u remove回调,但是如果关联已经声明了呢?

正如您所说,您可以使用after\u add和after\u remove回调。另外为关联模型设置after_提交过滤器,并将更改通知父级

class User < ActiveRecord::Base
  has_many :articles, :after_add => :read, :after_remove => :read     

  def read(article)
    # ;-)
  end
end 

class Article < ActiveRecord::Base
  belongs_to :user

  after_commit { user.read(self) }
end

您可以简单地覆盖关联的setter。这样还可以让您更自由地了解更改,例如,在更改前后使用assoc对象,例如

类用户这也适用于体量指定

你能用吗?也许一个代码示例来展示现在已经在做的事情可能会有所帮助……我正在为ActiveRecord编写一个扩展,所以假设已经声明了has_many:articles。有没有办法在事件发生后添加:after_add和:after_remove回调?@VenkatD。您可以执行类似User.after\u add\u for\u articles=[:read]谢谢您的运行,这个行为是否有文档记录?“我好像找不到了。”文卡德。您可以在ActiveRecord::Associations::Builder的CollectionAssociation类中找到。它创建了一个名为ModelClass::[callback name]\u的getter和setter,该getter和setter用于[association name]。