Скажите, есть ли таблица с полями
Products
--------
ID
CategoryID
Name
Price
... etc
Как Ruby on Rails может предоставить таблицу, которая возвращает
select count(*) from products group by categoryID
чтобы показать, сколько продуктов в каждой категории? Как будет выглядеть результат, в отличие от Products.find(:all)
, который представляет собой массив объектов Product?
Как более продвинутая операция, как насчет
select count(*) from products p inner join category c on p.categoryID = c.ID
group by categoryID
и
select average(price) from products p inner join category c on p.categoryID = c.ID
group by categoryID
?
Возможно, вы захотите проверить модуль ActiveRecord::Calculations
(я полагаю, он делает большую часть того, что вы просите):
http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html
Некоторые примеры:
Count:
Product.group(:category_id).count
Средний:
Product.joins(:category).group(:category_id).average(:price)
Те, кто надеется, пойдут на правильный путь. Определенно проверяйте связанную документацию, хотя это невероятно полезно.
Вы спрашиваете, что происходит за кулисами или как будет выглядеть результат. Если это последний, то научитесь любить консоль! Вы можете легко узнать сами:
$ script/console
Loading development environment (Rails 2.3.8)
>> Product.count
=> 229697
>> Product.count(:group => :category_id)
=> #<OrderedHash {27=>5588, 33=>41, 28=>156, 34=>22, 23=>15209, 1=>115357,
29=>109, 24=>68, 2=>14434, 25=>78576, 31=>85, 26=>4, 32=>48}>
Как вы можете видеть, это дает упорядоченное хеш-отображение category_ids для подсчетов для этих категорий.