将distinct与另一个条件

时间:2018-03-28 23:01:18

标签: ruby-on-rails ruby-on-rails-3.2 ruby-on-rails-5

我正在将Rails 3.2应用程序迁移到Rails 5.1(而不是在时间之前),并且遇到了查询位置的问题。

适用于Rails 3.2的代码如下所示,

sales = SalesActivity.select('DISTINCT batch_id').where('salesperson_id = ?', sales_id)

sales.find_each(batch_size: 2000) do |batchToProcess|
    .....

当我在Rails 5.1下运行此代码时,它似乎在尝试for_each时导致以下错误,

ArgumentError (Primary key not included in the custom select clause):

我希望得到一个给定salesperson_id的唯一batch_ids数组(?),然后我可以遍历,就像使用Rails 3.2一样。

由于我不明白的原因,看起来我可能需要包括整个记录来遍历(我的想法是我需要包含主键)?

我正试图改写'where',并试过以下内容,

sales = SalesActivity.where(salesperson_id: sales_id).select(:batch_id).distinct

但是,组合的ActiveRecordQuery将DISTINCT应用于salesperson_id和batch_id - 即#FAIL1

另外,因为我仍然使用select(让我们明确知道哪个列我想要'不同'),它当然仍然只选择batch_id列,我试图避免 - 这是#FAIL2 < / p>

如何有效地为给定的salesperson_id提取所有唯一的batch_id记录,以便我可以for_each它们?

谢谢!

1 个答案:

答案 0 :(得分:1)

怎么样:

SalesActivity.where(salesperson_id: sales_id).pluck('DISTINCT batch_id')

可能需要更改wherepluck的排序,但 pluck 应该返回batch_ids的数组