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]]
 
 

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

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