2013-12-10 99 views
5

下面的Rails代碼導致一個查詢在6多行查詢更新與在軌

people = { 1 => { "name" => "David" }, 2 => { "name" => "Jeremy" }, 3 => { "name" => "Tom" } } 
Person.update(people.keys, people.values) 

它會做每更新的行兩個查詢。一個選擇和一個更新。

有沒有辦法在只有一個查詢(或只有兩個查詢)的Rails 4中執行相同的任務?

有一些信息就如何做到這一點在MySQL,而不是Rails的: Multiple Updates in MySQL

感謝。

+0

簡短的回答是沒有。因爲每個事務都必須是關係數據庫中的原子和孤立的。 –

回答

5

不,但不是因爲@Sam D給了。

這是因爲如果你經歷了ActiveRecord,那是因爲你想對正在更新的對象運行驗證,回調等。這些驗證和回調沒有爲一組對象定義。

你可能會說:「我不在乎他們是否跑步。」這很好。這就是爲什麼Rails可以讓您直接通過SQL大規模更新的能力。

+0

萬花筒,謝謝你的解釋。正如你所提到的,我不在乎驗證和回調是否運行。你有鏈接/參考大量更新通過軌道中的SQL?謝謝。 – user2725109

+3

http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-update_all – Kaleidoscope