概要 †
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にメールが飛ぶ。
クラス名から監視するクラスが決定できない場合 †
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
監視できるメソッドは †
http://railsapi.masuidrive.jp/module/ActiveRecord%3A%3ACallbacks
Observerのクラスを置く場所 †
- 普通は、app/model以下
Observerを有効にするには †
config/environment.rb内で、config.active_record.observersに設定を追加する必要がある。
config.active_record.observers = :comment_observer, :signup_observer
この設定をしないと実行されない。
tag: Ruby on Rails?