如何为ToyStore模型构建Observer?

时间:2011-05-05 10:07:45

标签: ruby-on-rails redis activemodel

给出一个模型:

class User
  include Toy::Store
  attribute :name
end

我可以使用ActiveModel::Observer构建观察者吗?我删除了ActiveRecord框架,因为我没有在我的Rails应用程序中使用它。

添加观察者,如:

class UserObserver < ActiveModel::Observer
  def after_save(model)
    puts "Hello!"
  end
end

似乎不起作用。在应用程序配置中包含观察者不起作用,因为ActiveRecord框架已被删除。

2 个答案:

答案 0 :(得分:0)

您只能观察ActiveModel后代。它们不一定是ActiveRecord对象,但您可以阅读Yehuda Katz的文章: ActiveModel makes any ruby object feel like ActiveRecord

答案 1 :(得分:0)

我也想在玩具::商店中使用Observers。事实证明,由于ActiveRecord,可以观察到正常的对象生命周期事件,如在Rails中可观察到的创建,保存,更新和删除。玩具商店对象是ActiveModel对象,并且没有相同的挂钩。我在Why Toy Store Doesn't Work With Observers的博客文章中深入研究了这个主题。

但是,好消息是,仍然可以将观察员与玩具店一起使用,这取决于你实施它们。我还在How to Use Observers With Toy::Store 上发了一篇博文,但这里是它的要点:你的玩具对象,在这种情况下User,必须包括ActiveModel::Observing,并且必须在适合的情况下触发事件模型:

class User
  include Toy::Store
  attribute :name
  after_save :notify_observers_save_occured

  private

  def notify_observers_save_occured
    self.class.notify_observers(:after_save, self)
  end

end