觀察者Observers
Observer(觀察者)是一種常見的設計模式,可以讓你可以針對Model 的生命週期中的某些階段做出對應的行為,例如你想在使用者註
冊完帳號的時寄送一封確認信給他,這時候你就可以註冊一個觀察者來觀察User Model,當User建立成功的時候便寄送Email。
你可以透過Rails提供的generator來建立Observer:
$ rails generate observer user
invoke active_record
create app/models/user_observer.rb
invoke rspec
create spec/models/user_observer_spec.rb
建立好後需要在config/application.rb
中註冊這個觀察者:
config.active_record.observers = :user_observer
在所建立的觀察者類別中,撰寫需要觸發的行為,例如:
class PageObserver < ActiveRecord::Observer
observe :user
def after_save(user)
UserMailer.registration_confirmation(user).deliver # 寄送註冊確認信給 user
end
end
一個Observer中也可同時觀察多個不同的Model:
class ContentObserver < ActiveRecord::Observer
observe :article, :comment
def update_update(record)
# do something
end
end
Observer支援的觸發條件,和Callback所定義的七種觸發條件是相同的,詳見ActiveRecord 資料驗證及回呼 中的回呼一節