可以說我有一個模型:update_all與方法
class Result < ActiveRecord::Base
attr_accessible :x, :y, :sum
end
而不是做
Result.all.find_each do |s|
s.sum = compute_sum(s.x, s.y)
s.save
end
假設compute_sum
是一個可行的方法,並做了一些計算,不能轉換成SQL的。
def compute_sum(x,y)
sum_table[x][y]
end
是否有使用update_all
,大概就像一個辦法:
Result.all.update_all(sum: compute_sum(:x, :y))
我有超過80,000記錄更新。 find_each
中的每個記錄創建它自己的BEGIN
和COMMIT
查詢,並且每個記錄都單獨更新。
還有沒有其他更快的方法來做到這一點?
我有範圍和'where(...)'從句代替'all'。 –
如果你的總和(s.x,s.y)方法是ruby,你別無選擇,只能做你在這裏做的事情。你真正想要的是讓數據庫執行一個代碼。你應該嘗試爲它寫一個sql腳本。一些想法:http://stackoverflow.com/questions/4278582/sql-field-as-sum-of-other-fields。 – muichkine
您正在使用哪種DMBS?即postgres,MySQL等? –