给定一个模型:

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框架已被删除。

最佳答案

我还想在toy::store中使用观察器。结果发现,在rails中可以观察到的普通对象生命周期事件,比如create、save、update和delete,都是由于activerecord而可以观察到的。玩具商店对象是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

关于ruby-on-rails - 如何为ToyStore模型构建Observer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5895946/

10-11 20:17