【发布时间】:2014-01-27 01:44:24
【问题描述】:
在 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 会被调用并复制它,甚至可能会导致我做事的方式出现一些问题。好的,所以我想,好吧,我什么也不做,让calculate_averages 被调用并做它的事情。问题是,首先,即使您没有对记录进行任何更改,是否有办法强制调用回调?
其次,计算平均值的方式远更有效,根本不让回调被调用并一次性计算所有内容的平均值。这可以不让回调被调用吗?
【问题讨论】:
-
如果您有 10k 条记录要更新,那么为什么不完全绕过 AR,只做一个简单的 SQL UPDATE 呢?特别是如果你想跳过回调。
-
@muistooshort - 我简化了我需要做的计算,但它们很复杂并且也依赖于其他记录。我需要 Ruby。
标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2 rails-activerecord