Rails:使用group by子句检索记录时更新多个记录单列值

时间:2016-11-03 11:09:11

标签: 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')

在我处理代码中的组后,我想将初始查询used的所有记录的状态更改为done

问题在于,如果我这样做:

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

为了现在使用update_all,自从第一个回答这个条件的查询以来我有可能将新记录添加到表中,我将其状态设置为“完成”。虽然他们没有真正处理过,因为在最初的查询中他们并不存在。

所以基本上我需要一种方法从初始查询开始锁定表,直到更新或以某种方式得到一个被认为是""在查询组中。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

根据您的要求进行必要的更改。