浏览 1655 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-19
在进行Rails2.2.2到2.3.8的升级过程中,终于遭遇了这个问题。 ActiveRecord::Base的update方法,有四个alias_method_chain: base.alias_method_chain :update, :callbacks base.alias_method_chain :update, :timestamps base.alias_method_chain :update, :dirty base.alias_method_chain :update, :lock 由于我们的程序会在后台处理客户的信息,而不像改变updated_at,所以公有化了update_without_timestamps,显示的调用它。而在update_without_timestamps执行后,我们需要after_update来触发缓存的清空/更新。 Rails2.2.2里,method_chain实际工作顺序如下。update_without_timestamps执行后,正确的执行了callbacks来清空缓存,我们的程序工作正常。 引用 update_with_timestamps # update_without_timestamps = update_with_callbacks update_with_callbacks update_with_dirty update_with_lock 但是在2.3.8下,method_chain工作顺序变化了。执行update_without_timestamps的时候,直接跳过了update_with_callbacks,程序出错。 引用 update_with_callbacks
update_with_timestamps # update_without_timestamps = update_with_dirty update_with_dirty update_with_lock 看来在享用alias_method_chain便利的同时,还要注意它的一些细节呀。 代码的修改其实很简单,只要利用ActiveRecord::Base.record_timestamps = false就好了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |