2013-12-10 98 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