0

给定一个模型:

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

4

2 回答 2

0

我也想将 Observers 与 Toy::Store 一起使用。事实证明,在 Rails 中可观察到的正常对象生命周期事件(如创建、保存、更新和删除)是可观察的,因为 ActiveRecord。Toy Store 对象是 ActiveModel 对象并且没有相同的钩子。我在一篇关于为什么玩具店不与观察者合作的博客文章中深入探讨了这个主题。

但是,好消息,仍然可以在玩具商店中使用观察者,这取决于你来实现它们。我还写了一篇关于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
于 2013-03-05T23:57:28.530 回答
0

您只能观察 ActiveModel 后代。它们不一定是 ActiveRecord 对象,您可以在 Yehuda Katz 的文章中阅读: ActiveModel 使任何 ruby​​ 对象都感觉像 ActiveRecord

于 2011-05-05T14:57:17.650 回答