** 概要 [#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]
  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.active_record.observers = :comment_observer, :signup_observer
この設定をしないと実行されない。

#blikifooter(志田)

tag: [[Ruby on Rails>tag/Ruby on Rails]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら