2012-08-09 34 views
-1

是否可以在單個查詢中更新以下數據?ActiveRecord - 在單個查詢中更新不同記錄的單列數據

ID    Seq 
2    2 
1    4 
4    1 
3    3 

這將是最好的,如果它可以用軌道活動記錄完成,否則與SQL查詢將會非常好。

這樣做的原因是我有場景,我需要經常基於ajax請求更新一組id。我相信它在單個查詢中完成得更加優化。

+0

更好地說出問題。 – edhedges 2012-08-09 02:18:00

+0

這是一個正確的問題。爲什麼downvote? – TonyTakeshi 2012-08-09 10:50:32

+0

我不是downvote,但當我第一次看到這個問題需要改進。 – edhedges 2012-08-09 12:21:13

回答

0

找到我從herehere想要的解決方案。

這就是我如何處理活動記錄。

_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("','")}') " 
1

我想你是問你是否可以在一次交易中完成一組更新。

在導軌中,您可以使用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 
+0

謝謝。它絕對是解決方案之一。 – TonyTakeshi 2012-08-10 03:12:31

0

我們不能直接調用使用的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);") 
相關問題