如何保存模型而不在Rails中运行回调?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我需要在Rails中保存模型时计算值。所以我称之为calculate_averages一个Survey类的回调:

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_averages会被调用并重复此操作,甚至可能会导致一些问题。是否有办法强制回调被调用,即使没有对记录进行任何更改?

提问于
用户回答回答于

要禁用en-mass回调,请使用:

Survey.skip_callback(:calculate_averages)

然后启用:

Survey.set_callback(:calculate_average)
用户回答回答于

需要将回调注册到某些事件,例如save, validate etc.

set_callback :save, :before, :my_before_save_callback

要跳过before_save回调:

Survey.skip_callback(:save, :before, :calculate_average). 

扫码关注云+社区

领取腾讯云代金券