我正在使用 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/