Будет лучше получать правильные данные напрямую из базы данных:
@products = @line_items.group(:name).order("count_all DESC").count
Это даст вам имена и количество напрямую, например,
# => { "line_1" => 3, "line_2" => 2, "line_3" => 8 }
Есть немного Railsмагия на работе: SQL, сгенерированный с использованием group
, order
и count
, будет выглядеть так:
SELECT COUNT(*) AS count_all, name AS name FROM spree_line_items GROUP BY name ORDER BY count_all DESC
Вот где count_all
происходит из: Rails автоматически присоединяет его к столбцу count.
Затем вы можете подключить это непосредственно к вашему представлению:
<% @products.each do |name, line_item_count| %>
<%= name %> - <%= line_item_count %><br>
<% end %>
В качестве альтернативы, если вы используете переменную экземпляра в другом месте, вотпростое решение на Ruby:
@products = @line_items.group_by(&:name).sort_by { |_k, line_items| line_items.count }.reverse
Это просто использует sort_by
, чтобы получить записи, упорядоченные по соответствующему количеству, и наоборот, чтобы получить порядок убывания.Есть хороший тест для этого здесь .
Надеюсь, что это поможет - дайте мне знать, как вы поживаете / если у вас есть какие-либо вопросы.