В 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,хотя я предпочитаю понимать это в элегантной структуре рельсов.