http://railsapi.masuidrive.jp/class/ActiveRecord::Observer のチョー訳 :d
** 概要 [#k97a675a]
class CommentObserver < ActiveRecord::Observer
def after_save(comment)
Notifications.deliver_comment("admin@do.com", "New comment was posted", comment)
end
end
のようにObserverクラスを用意しておく。
これで、Comment#saveが呼ばれると、admin@do.comにメールが飛ぶ。
** クラス名から監視するクラスが決定できない場合 [#t7db2b58]
- observeメソッドで指定する。
class AuditObserver < ActiveRecord::Observer
observe Account
def after_update(account)
AuditTrail.new(account, "UPDATED")
end
end
- これで、Account#saveが呼ばれたあとにAuditObserver#after_saveが呼ばれる
- AuditObserverがAccountのほかに、Balanceも監視したい場合は、複数指定可能。
class AuditObserver < ActiveRecord::Observer
observe Account, Balance
def after_update(record)
AuditTrail.new(record, "UPDATED")
end
end
** 監視できるメソッドは [#m8736494]
http://railsapi.masuidrive.jp/module/ActiveRecord%3A%3ACallbacks
** Observerのクラスを置く場所 [#ic94ebf8]
- 普通は、app/model以下
** Observerを有効にするには [#af9a7c94]
config/environment.rb内で、config.active_record.observersに設定を追加する必要がある。
-config/environment.rb内で、config.active_record.observersに設定を追加する必要がある。
config.active_record.observers = :comment_observer, :signup_observer
この設定をしないと実行されない。
>※手元の本だと
-だが、[[手元の本>http://www.amazon.co.jp/Rails%E3%81%AB%E3%82%88%E3%82%8B%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%ABWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E5%89%8D%E7%94%B0-%E4%BF%AE%E5%90%BE/dp/4274066401]]だと
class StoreController < ApplicationController
observer :stock_control_observer
のように記述することでこれを実現している。でもobserverってメソッドがActionControllerとかにあるわけじゃないみたい。。。
どういう仕組みになってるんだろう。。。
どういう仕組みになってるんだろう。。。 &sad;
#blikifooter(志田)
tag: [[Ruby on Rails>tag/Ruby on Rails]]