我正在尝试让rails模型观察另一个对象(作为主题)。我在update
中看到有ActiveRecord::Base
方法(具有不同的语义),但为了使用Observable
模块,我需要在update
方法中实现{{1}}方法我的模型,以便我可以收到有关该主题变化的通知。
有关如何实现这一目标的任何想法?
答案 0 :(得分:1)
您可能希望使用常规Observer,当观察到的模型发生某些事件时,它将接收事件回调。
为什么需要将观察者功能封装到另一个模型中?
最好将事件/回调放在观察者中,并在其他模型上调用任何所需的功能作为辅助方法,而不是让你的模型成为观察者。
编辑:添加示例代码
class User < ActiveRecord::Base
end
class UserObserver < ActiveRecord::Observer
observe :user
def after_save(user)
MyHelperClass.do_some_stuff_for_user(user)
end
end
class MyHelperClass
def self.do_some_stuff_for_user(user)
puts "OMG I just found out #{user.name} was saved so I can do stuff"
end
end
答案 1 :(得分:0)
您似乎可以覆盖update
附带的默认ActiveRecord
,以便它可以接收来自主体的通知(假设您已在Observable中混合)。执行此类操作的程序在APress出版的“Pro ActiveRecord”一书中出现(第5章“奖励功能”)。
涉及使用alias_method
/ alias_method_chain
并涉及一些元编程......
我还没有亲自尝试过这个,但只是在这里留下一张便条以防万一其他人有所了解。