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