Будете ли вы довольны сортировкой по базе данных?
@products.order('brand_id, price')
РЕДАКТИРОВАТЬ: Фильтр и порядок
EDIT2: не индекс, а группа по модели
EDIT3: сортировка по марке, а затем по модели
РЕДАКТИРОВАТЬ4: Не останавливайтесь, пока есть возможности для улучшения. Лучшая многопрофильная сортировка
def lowest_priced(products)
# All products are grouped by the model (key is model, value is array of products belonging to that model)
per_model = products.group_by{|x|x.model}
# Hash of lowest products per model
lowest = {}
per_model.keys.each do |model|
# Find lowest priced product for the model
lowest[model] = per_model[model].min_by{|p| p.price}
end
# Sort the values of the hash
return lowest.values.sort_by{|p| [p.model.brand,p.model]}
end
В идеале вы должны изменить код выше, чтобы каждая функция имела только одну ответственность.