在rails中使用一个查询更新多行

use*_*109 6 activerecord ruby-on-rails

以下Rails代码导致6个查询

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

每个更新的行将执行两次查询.一个选择和一个更新.

有没有办法在Rails 4中只用一个查询(或只有两个查询)执行相同的任务?

这里有一些关于如何在MySQL中执行此操作的信息,但不包括Rails: MySQL中的多个更新

谢谢.

Kal*_*ope 6

不,但不是因为@Sam D给出的原因.

这是因为如果你经历过ActiveRecord,那是因为你想对正在更新的对象运行验证,回调等.没有为对象集合定义这些验证和回调.

你可能会说,"我不在乎他们是否跑步." 那没关系.这就是为什么rails使您能够直接通过SQL进行批量更新的原因.

  • http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-update_all (3认同)