轨道模型可以观察主题吗?

时间:2010-07-07 23:28:34

标签: ruby-on-rails

我正在尝试让rails模型观察另一个对象(作为主题)。我在update中看到有ActiveRecord::Base方法(具有不同的语义),但为了使用Observable模块,我需要在update方法中实现{{1}}方法我的模型,以便我可以收到有关该主题变化的通知。

有关如何实现这一目标的任何想法?

2 个答案:

答案 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并涉及一些元编程......

我还没有亲自尝试过这个,但只是在这里留下一张便条以防万一其他人有所了解。