Ruby on rails 如何为ToyStore模型构建观察者?

Ruby on rails 如何为ToyStore模型构建观察者?,ruby-on-rails,redis,activemodel,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 clas

给定一个模型:

class User
  include Toy::Store
  attribute :name
end
我可以使用
ActiveModel::Observer
来构建观察者吗?我删除了ActiveRecord框架,因为我没有在Rails应用程序中使用它

添加一个观察者,如:

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

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

您只能观察ActiveModel子体。它们不必是ActiveRecord对象,但正如您在Yehuda Katz的文章中所读到的:

我还想在Toy::Store中使用观察者。事实证明,在Rails中可以观察到的正常对象生命周期事件(如创建、保存、更新和删除)是可以观察到的,因为ActiveRecord。玩具商店对象是ActiveModel对象,没有相同的挂钩。我在上个月的一篇博文中对这个问题做了深入的探讨

但是,好消息是,在玩具商店中使用观察者仍然是可能的,这取决于你如何实现它们。我也在上写了一篇博文,但要点如下:您的玩具对象,在本例中为
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

就Rails而言,User只是一个简单的Ruby类,所以我可以看出内置的观察器是如何不起作用的。你可能得自己写。你有没有想过?