假设我必须使用简单模型First
和Second
,Second
使用belongs_to :first
建立一对一的关系。现在,我希望在保存Second
时使用First
执行某些操作。但我不想在after_save
设置First
回调来处理Second
。
我想让我的模特保持清洁,并尽可能不知道彼此。我总是遵循对象封装的最佳实践,它总是让我的生活更轻松。
很自然,由于after_save
是一种类方法,我尝试在Second
中设置此回调,如下所示:
class Second < ActiveRecord::Base
belongs_to :first
First.after_save do |record|
if that = Second.find_by_first_id(record.id)
# grow magic mushrooms here...
end
end
end
但这不起作用,永远不会执行回调,也不会引发错误。
答案 0 :(得分:4)
你可以通过观察者来做:
class FirstObserver < ActiveRecord::Observer
def after_save(first)
...
end
end
不要忘记在config/application.rb
中启用观察者:
config.active_record.observers = :first_observer
答案 1 :(得分:3)
最好设置observer,类似“FirstObserver”,并在那里写一个保存后的回调。
答案 2 :(得分:0)
试试这个:
First.class_eval do
def after_save record
#mashrooooms
end
end