加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何保存模型,而不在Rails中运行回调

发布时间:2020-12-16 20:30:33 所属栏目:百科 来源:网络整理
导读:在Rails中保存模型时,需要计算值.所以我调用calculate_averages作为调查类的回调: before_save :calculate_averages 然而,偶尔(最初我有10k个记录需要这个操作),我需要手动更新每个记录的所有平均值.没问题,我有如下代码: Survey.all.each do |survey| sur
在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读