Как присоединиться к таблице и подсчитать записи в Rails 3?

У меня есть класс Collection, в котором много монет. Я пытаюсь выбрать коллекции, в которых больше двух монет. В настоящее время у меня нет проблем с этим через прямой Ruby, но это крайне неэффективно.

Мой текущий код:

collections = Collection.all.select { |c| c.coins.count > 2 }

Как мне добиться этого с помощью вызова joins с Arel?

Спасибо!


person Yuval Karmi    schedule 09.08.2011    source источник
comment
Вы не должны использовать Collection в качестве имени класса... Существует несколько встроенных в Ruby структур, для которых требуются коллекции (например, коллекции моделей rails), и может случиться так, что вы переопределите некоторые вещи, что приведет к неожиданному поведению.   -  person BvuRVKyUVlViVIc7    schedule 10.08.2011
comment
Спасибо за совет. Любые идеи, как создать «соединение»?   -  person Yuval Karmi    schedule 10.08.2011


Ответы (2)


Чтобы ответить на мой собственный вопрос:

Collection.joins(:coins).group("coins.collection_id").having("count(coins.id) > 2")

Совет шляпы KJF, который спросил похожий вопрос и krakover за ответ.

person Yuval Karmi    schedule 13.08.2011

Добавьте столбцы counter_cache и запросите их.

http://railscasts.com/episodes/23-counter-cache-column

person BvuRVKyUVlViVIc7    schedule 10.08.2011
comment
Спасибо. Кэш счетчика предназначен для сохранения записей подсчета на лету. Учитывая, что в каждой моей коллекции всего 2-5 монет, это не проблема, и я бы не стал хранить в базе данных отдельный столбец. Есть идеи, как написать запрос joins с помощью Rails 3? - person Yuval Karmi; 10.08.2011