在Rails中保存模型时,需要计算值.所以我调用calculate_averages作为调查类的回调:
before_save :calculate_averages
然而,偶尔(最初我有10k个记录需要这个操作),我需要手动更新每个记录的所有平均值.没问题,我有如下代码:
Survey.all.each do |survey| survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f #and some more averages... survey.save! end
甚至在运行这段代码之前,我担心calculate_average会被调用并复制,甚至可能会导致一些问题.好的,那么我觉得好,我什么也不做,让__计数器得到调用并做它的事情.问题在于,首先,即使您没有对记录进行任何更改,是否有一种强制回调的方法?
解决方法
我相信你要求的可以用
ActiveSupport::Callbacks
实现.看看set_callback和skip_callback.
为了“强制回调函数调用,即使您没有更改记录”,您需要注册一些事件的回调,例如保存,验证等.
set_callback :save,:before,:my_before_save_callback
要跳过before_save回调,您可以:
Survey.skip_callback(:save,:calculate_average).
请参考链接的ActiveSupport::Callbacks
在其他支持的选项,如条件和块,set_callback和skip_callback.
原文地址:https://www.jb51.cc/ruby/273535.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。