问题
I have a Collection
class which has many coins.
I am trying to select collections which have more than two coins.
Currently, I have no problem doing that through straight Ruby, but that's extremely inefficient.
My current code:
collections = Collection.all.select { |c| c.coins.count > 2 }
How do I achieve that through a joins
call with Arel?
Thanks!
回答1:
To answer my own question:
Collection.joins(:coins).group("coins.collection_id").having("count(coins.id) > 2")
Hat tip to KJF who asked this similar question and to krakover for answering it.
回答2:
Add counter_cache columns and query them.
http://railscasts.com/episodes/23-counter-cache-column
来源:https://stackoverflow.com/questions/7004048/how-to-join-a-table-and-count-records-in-rails-3