ruby-on-rails-3 - 当所有记录都不同时,如何使用全部更新?

标签 ruby-on-rails-3 activerecord bulk update-all

我如何使用 update_all ,如果我想用各种不同的值更新一列 300,000 条记录?

我想做的是:

Model.update_all(:column => [2,33,94,32]).where(:id => [22974,22975,22976,22977]) 

但不幸的是,这不起作用,对于 300,000 个条目,情况更糟。

最佳答案

来自 ActiveRecord#update documentation :

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

所以在你的情况下:
updates = {22974 => {column: 2}, 22975 => {column: 33}, 22976 => {column: 94}, 22977 => {column: 32}}
Model.update(updates.keys, updates.values)

编辑:刚刚查看了源代码,这也生成了 n 个 SQL 查询......所以可能不是最好的解决方案

关于ruby-on-rails-3 - 当所有记录都不同时,如何使用全部更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8769361/

相关文章:

ruby-on-rails - Bundler 与 Rubygems 2.0 不兼容。请升级到 Bundler 1.3 或更高版本

ruby-on-rails - 在 rails 中选择元素的子集及其子元素

sql - 社交网络应用程序中友谊的最佳数据库架构

perl - 如何批量搜索并替换为Perl?

sql-server - 将大量数据从一个表插入到另一个表的最快方法是什么? (SQL Server 2005)

android - Rails protect_from_forgery 与移动应用程序

ruby-on-rails - Rails的link_to_function弃用状态?

mysql - 在我的 RAILS 应用程序中将 2 个 SELECT 合并为一个 SELECT

ruby-on-rails - 在 Rails 多态关联中查找父项

python - 使用Python API通过映射将CSV加载到Elasticsearch索引