Active Record 回调、高级属性与观察者的深入解析
1. 回调基础与实现方式
Active Record 控制着模型对象的生命周期,包括创建、修改、保存、更新和销毁。通过回调,我们可以让代码参与到这个监控过程中,在对象生命周期的重要事件发生时执行特定代码,实现复杂验证、映射列值以及阻止某些操作完成。
Active Record 定义了二十个回调,其中十八个形成 before/after 对,围绕着模型对象的基本创建、更新和销毁操作。另外两个特殊的回调是 after_find 和 after_initialize,它们没有对应的 before_xxx 回调。
实现回调有两种基本方式:
- 直接定义回调实例方法 :例如,若要处理 before_save 事件,可以这样写:
class Order < ActiveRecord::Base
# ..
def before_save
self.payment_due ||= Time.now + 30.days
end
end
- 声明处理程序 :处理程序可以是方法或块。使用以事件命名的类方法将处理程序与特定事件关联。若关联方法,需将其声明为私有或受保护,并以符号形式指定其名称;若指定块,直接在声明后添加,该块会接收模型对象作为参数。
class Order < ActiveRecord::Base
超级会员免费看
订阅专栏 解锁全文
39

被折叠的 条评论
为什么被折叠?



