我有一个Collection
班,里面有很多钱币。
我想选择有两个以上硬币的收藏品。
目前,我通过直接Ruby实现这一点没有问题,但效率极低。
我目前的代码:
collections = Collection.all.select { |c| c.coins.count > 2 }
如何通过使用Arel进行joins
调用来实现这一目标?
谢谢!
答案 0 :(得分:23)
回答我自己的问题:
Collection.joins(:coins).group("coins.collection_id").having("count(coins.id) > 2")
要求KJF和this similar question回答问题的krakover的小费提示。
答案 1 :(得分:1)
添加counter_cache列并查询它们。