是否可以在單個查詢中更新以下數據?ActiveRecord - 在單個查詢中更新不同記錄的單列數據
ID Seq
2 2
1 4
4 1
3 3
這將是最好的,如果它可以用軌道活動記錄完成,否則與SQL查詢將會非常好。
這樣做的原因是我有場景,我需要經常基於ajax請求更新一組id。我相信它在單個查詢中完成得更加優化。
是否可以在單個查詢中更新以下數據?ActiveRecord - 在單個查詢中更新不同記錄的單列數據
ID Seq
2 2
1 4
4 1
3 3
這將是最好的,如果它可以用軌道活動記錄完成,否則與SQL查詢將會非常好。
這樣做的原因是我有場景,我需要經常基於ajax請求更新一組id。我相信它在單個查詢中完成得更加優化。
這就是我如何處理活動記錄。
_params = ["12", "9", "13", "14", "15", "16"]
db = ActiveRecord::Base.connection();
query = "UPDATE #{self.table_name} SET display_order = CASE id "
_params.each_with_index do |d,i|
query += sanitize_sql(["WHEN ? THEN ? ",d,i])
end
query += "END "
query += "WHERE id in ('#{_params.join("','")}') "
我想你是問你是否可以在一次交易中完成一組更新。
在導軌中,您可以使用ActiveRecord::Base.transaction來實現此目的。例如,對於一個Model
,您可以:
Model.transaction do
Model.update(2, {:seq => 2})
Model.update(1, {:seq => 4})
Model.update(4, {:seq => 1})
Model.update(3, {:seq => 3})
end
謝謝。它絕對是解決方案之一。 – TonyTakeshi 2012-08-10 03:12:31
我們不能直接調用使用的Active Record單個查詢多個更新。正如你所說,我們可以在rails中作爲sql查詢運行它。
sql = ActiveRecord::Base.connection();
sql.execute("INSERT into products (id,name,description) VALUES (id-1,'name4','desc4'),(id-2,'name5','desc5'),(id-3,'name6','desc7') ON DUPLICATE KEY UPDATE name=VALUES(name),description=VALUES(description);")
更好地說出問題。 – edhedges 2012-08-09 02:18:00
這是一個正確的問題。爲什麼downvote? – TonyTakeshi 2012-08-09 10:50:32
我不是downvote,但當我第一次看到這個問題需要改進。 – edhedges 2012-08-09 12:21:13