回调简介

回调是一种在对象生命周期的特定时刻(在创建,删除,更新,验证,保存或从数据库加载之前或之后)调用的方法。

例如,假设你有一个列表在创建后 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 之后运行,无论宏调用的执行顺序如何。