rails 回调函数

来源:互联网 发布:勇士绝杀雷霆数据 编辑:程序博客网 时间:2024/06/01 08:22


回呼 Callback

在介紹過驗證之後,接下來讓我們來看看回呼。回呼可以在Model資料的生命週期,掛載事件上去,例如我們可以在資料儲存進資料庫前,做一些修正,或是再儲存成功之後,做一些其他動作。回呼大致可以分成三類:

  1. 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    endend
  1. 回呼的方法最好放在protectedprivate下,確保從Model外部是無法呼叫的。
  2. before_validationbefore_save的差別在於後者不會經過Validation資料驗證。
  3. 請避免before_開頭的回呼方法中,最後運算的結果不小心回傳false。這樣會中斷儲存程序。如果不確定的話,請回傳return true。這算是常見的地雷,而且不容易除錯(你會發現資料莫名地無法儲存成功)。

其中after_rollbackafter_commit這兩個回呼和Transaction交易有關。Rollback指的是在transaction區塊中發生例外時,Rails會將原先transaction中已經被執行的所有資料操作回復到執行transaction前的狀態,after_rollback就是讓你在rollback完成時所觸發的回呼,而after_commit是指在transaction完成後才觸發的回呼,關於transaction的部份請參考ActiveRecord 進階功能的交易Transactions一節。


转自:http://ihower.tw/rails3/activerecord-lifecycle.html

0 0
原创粉丝点击