回撥簡介

回撥是一種在物件生命週期的特定時刻(在建立,刪除,更新,驗證,儲存或從資料庫載入之前或之後)呼叫的方法。

例如,假設你有一個列表在建立後 30 天內到期。

一種方法是這樣的:

class Listing < ApplicationRecord
  after_create :set_expiry_date

  private

  def set_expiry_date
    expiry_date = Date.today + 30.days
    self.update_column(:expires_on, expiry_date)
  end
end

回撥的所有可用方法如下所示,其順序與在每個物件操作期間呼叫它們的順序相同:

建立一個物件

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save 的
  • after_commit / after_rollback

更新物件

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save 的
  • after_commit / after_rollback

摧毀一個物體

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit / after_rollback

注意: after_save 在建立和更新時執行,但總是在更具體的回撥 after_create 和 after_update 之後執行,無論巨集呼叫的執行順序如何。