给定一个模型:
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/