Два способа сделать это ... первый из них проще и эффективнее второго:
Метод 1: использовать кеш счетчика
class SoldProduct < ActiveRecord::Base
belongs_to :product, :counter_cache => true
end
Затем вы добавляете атрибут sold_products_count
в таблицу Product
и находите их, используя это:
Product.find(:all, :order => 'sold_products_count')
Метод 2: Делайте это на основе SQL
sales_count = Product.joins(:sold_products).count(:group=>"sold_products.product_id").sort_by{|product, sales| sales}.reverse
sales_count.each {|product, sales| puts "Product #{product} has #{sales} sales"}