rails observer观察者


觀察者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 資料驗證及回呼 中的回呼一節

Callback不同的地方是,Observer通常是設計來做所觀察的Model以外的行為,例如在我們的例子中我們觀察了User,而在觸發的行為我們呼叫了其他類別的方法(UserMailer),這不屬於User Model的責任範圍,因此在應用上我們會將自己Model責任範圍內的行為使用Callback,像是資料驗證或是更新。本身責任範圍外的行為則使用Observer,像是寄送Email或是呼叫背景處理等。


转自:http://ihower.tw/rails3/activerecord-others.html#transactions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值