回呼 Callback
在介紹過驗證之後,接下來讓我們來看看回呼。回呼可以在Model資料的生命週期,掛載事件上去,例如我們可以在資料儲存進資料庫前,做一些修正,或是再儲存成功之後,做一些其他動作。回呼大致可以分成三類:
- 在Validation驗證前後 2. 在儲存進資料庫前後 3. 在從資料庫移除前後
以下是當一個物件儲存時的流程,其中1~7就是回呼可以觸發的時機:
- (-) save
- (-) valid
- (1) before_validation
- (-) validate
- (2) after_validation
- (3) before_save
- (4) before_create
- (-) create
- (5) after_create
- (6) after_save
- (7) after_commit
來看一個範例:設定一個before_validation
回呼設定預設值,其中的setup_default
方法會在資料驗證前執行:
class Event < ActiveRecord::Base
before_validation :setup_default
protected
def setup_default
self.is_public ||= true
end
end
其中after_rollback
和after_commit
這兩個回呼和Transaction交易有關。Rollback指的是在transaction區塊中發生例外時,Rails會將原先transaction中已經被執行的所有資料操作回復到執行transaction前的狀態,after_rollback
就是讓你在rollback完成時所觸發的回呼,而after_commit
是指在transaction完成後才觸發的回呼,關於transaction的部份請參考ActiveRecord 進階功能的交易Transactions一節。