这两天重装系统,没做什么事情,装系统现在已经很快了,只是还在做好多的后续工作,回头再写篇总结好了。先写之前剩下的一篇。这次是聊点ActiveRecord的callback。
Monitor
ActiveRecord控制model的生命周期,包括他们的CRUD(《Agile..》上很风趣地说是watches sadly as they are destroyed. haha)。
而在这过程中的许多时刻我们都可以通过callbacks来进行一些操作.
ActiveRecord定义了十六个回调函数,十四个是before/after_func
的形式,分别在一些函数之前或之后被调用,如destory, validation
,两个特别的是after_find以及after_initialize,这两个没有对应的before。
他们的流程如下:
做个简单的解释,save()
会产生两种行为,一种是新产生,一种是更新。而这两种行为可以通过before_validation
或after_validation
等的方法加上参数on: create
或on: update
来决定是哪种。
而之前提到的after_find
是在任何find操作后会调用,after_initialize
则会在一个Active Record的对象产生后调用。我的理解是,比如Model.new()
这个只是产生了一个ActiveRecord对象,并没有save,所以调用after_initialize
。
怎么用呢? 我们需要写一个handler和一个与它关联的相应的回调函数。
比如:
1 2 3 4 5 6 7 8 9 10 |
|
在before_validation normalize_credit_card_number
中声明了一个handler并把它关联到before_validation
这个事件中。然后再定义一个函数就行,这个函数最好是private或protected的。