2011-11-08 7 views
1

商品と在庫があります。各在庫はproduct_id, color_id, storage_id and in_stockです。 Iストレージによってグループストックしたい特定の製品についてrailsグループby入れ子テーブル

その後色及び出力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> 

答えて

0

注文、色:

これまでのところ、私のクエリは次のようです。結果にgroup_by関数を使用すると、Storage Idをキーとして順序付けられたハッシュが作成されます。ストレージ&の色で注文したため、注文はハッシュで維持されます。

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> 

正しい場合は、私はHAMLマークアップに慣れています。