0

与えられたモデル:

class User
  include Toy::Store
  attribute :name
end

ActiveModel::Observerオブザーバーの作成に使用できますか?Railsアプリで使用していないため、ActiveRecordフレームワークを削除します。

次のようなオブザーバーを追加します。

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

動作しないようです。ActiveRecordフレームワークが削除されているため、アプリケーション構成にオブザーバーを含めることはできません。

4

2 に答える 2

0

また、Toy::Storeでオブザーバーを使用したかったのです。Railsで監視可能なcreate、save、update、deleteなどの通常のオブジェクトライフサイクルイベントは、ActiveRecordが原因で監視可能であることがわかります。おもちゃ屋のオブジェクトはActiveModelオブジェクトであり、同じフックはありません。おもちゃ屋がオブザーバーと連携しない理由に関するブログ投稿で、このテーマについて深く掘り下げました。

しかし、良いニュースですが、おもちゃ屋でオブザーバーを使用することはまだ可能です。それらを実装するのはあなた次第です。また、 Toy :: Storeでオブザーバーを使用する方法 に関するブログ投稿も行いましたが、その要点は次のとおりです。この場合、Toyオブジェクトには、そのモデルに適したイベントを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の子孫のみを監視できます。Yehuda Katzの記事で読むことができるように、それらはActiveRecordオブジェクトである必要はありません: ActiveModelは、すべてのルビーオブジェクトをActiveRecordのように感じさせます

于 2011-05-05T14:57:17.650 に答える