update_all con un método
Digamos que tengo un modelo:
class Result < ActiveRecord::Base
attr_accessible :x, :y, :sum
end
En lugar de hacer
Result.all.find_each do |s|
s.sum = compute_sum(s.x, s.y)
s.save
end
asumiendocompute_sum
es un método disponible y realiza algunos cálculos que no se pueden traducir a SQL.
def compute_sum(x,y)
sum_table[x][y]
end
¿Hay alguna forma de usarupdate_all
, probablemente algo como:
Result.all.update_all(sum: compute_sum(:x, :y))
Tengo más de 80,000 registros para actualizar. Cada registro enfind_each
crea su propioBEGIN
yCOMMIT
consultas, y cada registro se actualiza individualmente.
¿O hay alguna otra forma más rápida de hacer esto?