Запрос Rails 3 при условии количества ассоциаций

В Rails 3 с mysql, предположим, у меня есть две модели, Клиенты и Покупки, очевидно, покупка принадлежит клиенту. Я хочу найти всех клиентов с 2 и более заказами. Я могу просто сказать:

Customer.includes(:purchases).all.select{|c| c.purchases.count > 2}

На самом деле, строка выше запрашивает величину Customer.all и Purchase.all, а затем выполняет обработку типа «select» в ruby. В большой базе данных я бы предпочел избегать всех этих вычислений «select» в ruby, а mysql выполнял обработку и давал мне только список квалифицированных клиентов. Это намного быстрее (поскольку mysql более приспособлен для этого) и значительно снижает пропускную способность базы данных.

К сожалению, я не могу вызвать код со строительными блоками в рельсах (где, имея, группу и т.д.), чтобы это произошло, что-то вроде (псудокода):

Customer.joins(:purchases).where("count(purchases) > 2").all

Я соглашусь на прямое решение MySql,хотя я предпочитаю понимать это в элегантной структуре рельсов.

31
задан Charles 11 June 2011 в 02:03
поделиться