Как группировать коллекцию по столбцам с рельсами

Моя таблица с именами содержит product_id, color_id, storage_id and in_stock в качестве столбцов.

Для данного продукта я хочу сгруппировать все запасы с помощью хранилища, затем для каждого хранилища я хочу показать продукт (цвет): in_stock

Как написать метод и как сделать?

Ответ 1

<% Stock.all.group_by(&:storage).each do |storage, products| %>
  Storage: <%= storage %>
  <% products.each do |product| %>
    (<%= product.color_id %>): <%= product.in_stock %>
  <% end %>
<% end %>

Изменить: обновлено, чтобы использовать ERB и in_stock как число, а не логический столбец yes/no, и используйте color_id вместо color.name, потому что это предполагает, что вы имеете отношение к цвету.

Ответ 2

Не структурировано точно, как вам это нужно (недостаточно информации со своего поста), но что-то вроде этого возможно?

items = Stock.select('color_id, in_stock').group('stocks.storage_id').where(:product_id => foo)

items.each {|item| puts "(#{lookup_color(item.color_id)}): #{in_stock}"