Participating in the Monitoring Process
参与监控过程
ActiveRecord控制着model对象 的生命周期,它创建它们,在修改,保存和更新的时候监控它们,并且在删除的时候也进行监控。使用回调函 数,ActiveRecord允许我们的代码参与这个监控过程。
ActiveRecord总共定义了20个回调函数。18个 成对的before和after,还有两个例外:after_find和after_initialize。
开发细节(三)Participating in the Monitoring Process-participating">
实现callback有两种方式。
第一种,直接在对象的回调方法中写代码。
class Order < ActiveRecord::Base def after_save self.payment_due ||= Time.now + 30.days end end
第二种,为回调声明一个处理器,处理器可以是一个方法,或者是一个block。
class Order < ActiveRecord::Base before_validation :normalize_credit_card_number after_create do |order| logger.info "Order #{order.id} created" end protected def normalize_credit_card_number self.cc_number.gsub!(/[-\s]/, '') end end
你可以为一个回调函数指定多个处理程序,多个处理程序会按照指定的顺序执行,除非其中一个处理程序 返回false,这时候才会终止后面的处理程序。
因为需要优化性能,定义after_find和 after_initialize只能用方法的方式,如果使用其他方式,定义的处理程序会被忽略。
Grouping Related Callbacks Together
callback分组
可以将相关的callback处理方法定义在单独的类中 ,这样这些处理方法就可以在多个model中共享。一个处理类就是在一个类中定义回调方法,把这些类放在 app/models文件夹中。
class CreditCardCallbacks def before_validation(model) model.cc_number.gsub!(/[-\s]/, '') end end class Order < ActiveRecord::Base before_validation CreditCardCallbacks.new end class Subscription < ActiveRecord::Base before_validation CreditCardCallbacks.new end
上面的CreditCardCallbacks的before_validation就是共享的,这需要Order和Subscription都包含 cc_number属性。共享的处理程序,需要处理相同的属性,肯定需要共享处理程序的model有相同名称的属性。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索程序
, 方法
, activerecord
, end
, 处理
一个
participating、nonparticipating ffi、participating share、participating怎么读、participating loan,以便于您获取更多的相关知识。