ruby-on-rails - rails : update multiple records single column value while the records were retrieved using a group by clause

标签 ruby-on-rails ruby postgresql activerecord rails-activerecord

我正在使用 group by 子句从表中检索一些数据,之后我想为初始查询检索到的所有记录更新单个列值。

所以我需要确保从初始查询到我更新记录没有添加新行。

解释:假设模型 Test 有 5 列:Id A B C Status

所以我首先查询如下:

Test.select('count(*), A, B').where(status:'new', C: 'value').group('A, B')

在我处理代码中的组之后,我想将初始查询使用的所有记录的状态更改为完成

问题是如果我这样做:

Test.where(status: 'new', C: 'value')

为了现在使用 update_all,自第一个回答此条件的查询以来,有可能将新记录添加到表中,我将把它们的状态设置为“完成”,尽管它们并不是真的已处理,因为在初始查询期间它们不存在。

所以基本上我需要一种方法来锁定表以防止从初始查询到更新为止的插入,或者以某种方式获取组中查询“考虑”的 id 的列表。

我该怎么做?

最佳答案

我建议在第一个查询中也从 select 语句中选择 id。

Test.select('count(*), A, B, Id').where(status:'new', C: 'value').group('A, B').

从上述查询中选择 ID。然后使用另一个查询来更新它们。

Test.where("Id IN ?", ids ).update_all()

更新您需要的必要更改。

关于ruby-on-rails - rails : update multiple records single column value while the records were retrieved using a group by clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40399996/

相关文章:

sql - 在 Django 中执行 PostgreSQL LEFT OUTER JOINS 和 CASE

ruby-on-rails - 从字符串编译 ERB 代码时出错

ruby - Ruby 正则表达式分组的量词

ruby - 在救援中捕获 Mixlib::ShellOut::ShellCommandFailed 错误

postgresql - 给定 PostGIS 中的 2 LINESTRINGS 接触,如何将它们连接在一起?

PostgreSQL 导出 COMPOUND 查询输出到 CSV

ruby-on-rails - Rails 4 - 部分上的多个产量 block

ruby-on-rails - 范围内的 find_by 正在触发 2 个查询

ruby-on-rails - 在 Rails 中命名 PORO 模型的约定?

ruby-on-rails - 如何从 Rails 中下载的 zip 文件中获取 XML 文档