我正在将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它们?
谢谢!
答案 0 :(得分:1)
怎么样:
SalesActivity.where(salesperson_id: sales_id).pluck('DISTINCT batch_id')
可能需要更改where
和pluck
的排序,但 pluck 应该返回batch_ids的数组