给出一个模型:
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框架已被删除。
答案 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