美文网首页
ActiveRecord callback 探究

ActiveRecord callback 探究

作者: SecondRocker | 来源:发表于2015-10-12 09:25 被阅读130次

在工作中发现,rails guide与其他资料中对ActiveRecord的回调顺序不太一致,因此做一个实验来确定创建、修改、删除、touch所触发的回调及顺序。
测试代码

class Product < ActiveRecord::Base

  [:before_validation,:after_validation,
   :before_save,
   #:around_save,
   :before_create,
   #:around_create,
   :after_create,:before_update,:around_update,
   :after_update,:after_save,:before_destroy,
   :after_destroy,:after_touch].each do |m|
     define_method m do
       logger.info "#{m} execute"
     end
     eval "#{m} :#{m}"
   end

end

create结果

屏幕快照 2015-10-11 下午9.32.44.png

update结果


屏幕快照 2015-10-11 下午9.34.33.png

destroy 结果

屏幕快照 2015-10-11 下午9.35.39.png

touch结果

屏幕快照 2015-10-11 下午9.36.39.png

测试使用的ruby版本为2.2.3,rails版本为4.2.4,around_save和around_create会导致commit失败,目前不知原因,估计为rails的bug,综上真实的结果为

  • create触发的回调(按顺序)before_validation、after_validation、before_save、before_create、after_create、after_save
  • update触发的回调 before_validation、after_validation、before_save、before_update、around_update、after_update、after_save
  • destroy触发的回调 before_destroy、after_destroy
  • touch触发的回调 after_touch

费了半天功夫,rails guide是对的!

相关文章

网友评论

      本文标题:ActiveRecord callback 探究

      本文链接:https://www.haomeiwen.com/subject/dofocttx.html