《Rails-Guides》Reading notes four:Active Record Callbacks

回调概述

        在 Rails 应用正常运作期间,对象可以被创建、更新或删除。Active Record 为对象的生命周期提供了钩子,使我们可以控制应用及其数据。

        回调使我们可以在对象状态更改之前或之后触发逻辑。

        回调是在对象生命周期的某些时刻被调用的方法。通过回调,我们可以编写在创建、保存、更新、删除、验证或从数据库中加载 Active Record 对象时执行的代码。

        回调在使用之前需要注册。我们可以先把回调定义为普通方法,然后使用宏式类方法把这些普通方法注册为回调:

《Rails-Guides》Reading notes four:Active Record Callbacks_第1张图片

可用的回调

        下面按照回调在 Rails 应用正常运作期间被调用的顺序,列出所有可用的 Active Record 回调。

创建对象

《Rails-Guides》Reading notes four:Active Record Callbacks_第2张图片

更新对象

《Rails-Guides》Reading notes four:Active Record Callbacks_第3张图片

删除对象

after_initialize 和 after_find 回调

        当 Active Record 对象被实例化时,不管是通过直接使用 new 方法还是从数据库加载记录,都会调用 after_initialize 回调。使用这个回调可以避免直接覆盖 Active Record 的 initialize 方法。

        当 Active Record 从数据库中加载记录时,会调用 after_find 回调。如果同时定义了 after_initialize 和 after_find 回调,会先调用 after_find 回调。

        after_initialize 和 after_find 回调没有对应的 before_* 回调,这两个回调的注册方式和其他 Active Record 回调一样。

《Rails-Guides》Reading notes four:Active Record Callbacks_第4张图片
《Rails-Guides》Reading notes four:Active Record Callbacks_第5张图片

调用回调

        下面这些方法会触发回调:

《Rails-Guides》Reading notes four:Active Record Callbacks_第6张图片

        下面这些查找方法会触发 after_find 回调:

《Rails-Guides》Reading notes four:Active Record Callbacks_第7张图片

        每次初始化类的新对象时都会触发 after_initialize 回调。

        和验证一样,我们可以跳过回调。使用下面这些方法可以跳过回调:慎重地使用这些方法,因为有些回调包含了重要的业务规则和应用逻辑,在不了解潜在影响的情况下就跳过回调,可能导致无效数据。

《Rails-Guides》Reading notes four:Active Record Callbacks_第8张图片

你可能感兴趣的:(《Rails-Guides》Reading notes four:Active Record Callbacks)