我想知道创建ActiveRecord对象时调用回调和验证的顺序是什么.

假设我有一些自定义验证&回调如下所示:

validates :reference_code, :if => :reference_code, :on => :create
before_create :assign_reference

哪个先跑?需要首先进行回调,否则验证可能会失败.

推荐答案

最新版本的Rails列表可以在ActiveRecord::Callbacks documentation中找到.轨道4、3和;下面是两个例子.

轨道4

该列表的最新版本可以在轨道4 Guides中找到.

创建对象

  • 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

轨道3

该列表的最新版本可以在轨道3 Guides中找到.

创建对象

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save

更新对象

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save

摧毁一个物体

  • before_destroy
  • around_destroy
  • after_destroy

轨道2

该列表的最新版本可在轨道2.3 Guides页中找到

创建对象

  • before_validation
  • before_validation_on_create
  • after_validation
  • after_validation_on_create
  • before_save
  • before_create
  • 100手术
  • after_create
  • after_save

更新对象

  • before_validation
  • before_validation_on_update
  • after_validation
  • after_validation_on_update
  • before_save
  • before_update
  • 100手术
  • after_update
  • after_save

摧毁一个物体

  • before_destroy
  • 100 operation
  • after_destroy

因为需要首先验证reference_code,所以可以在after_validation回调中调用assign_reference方法,或者在我上面提供的列表中,在它之后出现的任何回调中调用assign_reference方法.

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

参数数量错误(给定1个,预期为0个;必需关键字:IO、文件名)-活动存储

如何将POST-CSSS-IMPORT与TRANWIND-RACKS和IMPORT映射一起使用

CanCanCan、Pagy 和 Meil​​iSearch,如何组合这 3 个 gem?

如何在 Rails 中声明动态路由范围/命名空间变量?

线程如何在 Web 应用程序中工作?

如何使用默认的 Rails 记录器记录 Ruby 异常的整个回溯?

跳过模型中的某些验证方法

我如何存根 find_each 以在 rails 3 中进行 rspec 测试

通过字符串获取 ActiveRecord 对象的属性

在 PostgreSQL 中强制字符串的最大长度

如何在 Rails 1.2.3 中使复选框默认为选中?

我可以在 twitter-bootstrap popover 数据内容中使用 html 标签吗?

如何仅使用 PostgreSQL 创建简单的模糊搜索?

如何打印出范围之间的随机数?

设计:在注册期间禁用密码确认

何时使用 Helpers 而不是 Partials

rake 任务中的 def 块

Rails 路由:GET 没有参数 :id

何时在 Ruby on Rails 中使用 lambda?