2013-12-10 7 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, это потому, что вы хотите запускать проверки, обратные вызовы и т. Д. На обновляемые объекты. Эти проверки и обратные вызовы не определены для коллекции объектов.

Вы можете сказать: «Мне все равно, если они побегут». И это нормально. Вот почему рельсы дают вам возможность массового обновления через SQL напрямую.

+0

Калейдоскоп, спасибо за ваше объяснение. Как вы уже упоминали, мне все равно, работают ли проверки и обратные вызовы. У вас есть ссылка/ссылка для массового обновления через SQL в rails? Благодарю. – user2725109

+3

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

Смежные вопросы