rails group by для создания вложенной таблицы - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть товар и акции. Каждый запас содержит product_id, color_id, storage_id and in_stock.

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

Хранение 1

  • Хранение 1
    • Цвет A: in_stock
    • Цвет B: in_stock
  • Хранение 2:
    • Цвет A: in_stock
    • Цвет B: in_stock

К сожалению, я не могу отобразить представление.

Пока мой запрос следующий:

def all_units_in_stock
  stocks.in_stock.group(:storage_id, :color_id).includes(:storage, :color)
end

which returns
Product.find(11).all_units_in_stock
Product Load (37.1ms)  SELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT 1  [["id", 11]]
Stock Load (0.3ms)  SELECT "stocks".* FROM "stocks" WHERE "stocks"."product_id" = 11 AND (in_stock > 0) GROUP BY storage_id
Storage Load (0.2ms)  SELECT "storages".* FROM "storages" WHERE "storages"."id" IN (1, 2, 3, 4, 5)
Color Load (0.2ms)  SELECT "colors".* FROM "colors" WHERE "colors"."id" IN (3)
=> [#<Stock id: 162, product_id: 11, storage_id: 1, in_stock: 10.0, created_at: "2011-11-07 22:54:50", updated_at: "2011-11-07 22:54:50", color_id: 3>, #<Stock id: 163, product_id: 11, storage_id: 2, in_stock: 10.0, created_at: "2011-11-07 22:54:50", updated_at: "2011-11-07 22:54:50", color_id: 3>

1 Ответ

0 голосов
/ 02 марта 2012

Заказ на хранение, затем цвет. Затем используйте функцию group_by для результатов, это создаст упорядоченный хэш с идентификатором хранилища в качестве ключа. Поскольку вы заказали с помощью функции хранения и цвета, порядок будет сохраняться в хеше.

products = Product.find(11).all_units_in_stock
@group_by_storage = products.group_by {|p| p.storage_id }

Теперь, по вашему мнению, вы можете перебирать хеш.

<% @group_by_storage.each do |key, value| %>
  <ul>
    <li><%= key %>

      <ul>
        <li><%= value.color_id %>
      </ul>
    </li>
  <ul>

Пожалуйста, извините за синтаксис erb, если он правильный, я привык к разметке HAML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...