2011-11-08 6 views
11

私のテーブル名義在庫には、列としてproduct_id, color_id, storage_id and in_stockが含まれています。グループに私がしたい特定の製品についてはレールでコレクションを列でグループ化する方法

保存することにより、すべての株式は、その後、各ストレージのために、私は、製品(色)を表示したい:IN_STOCK

がどのようにメソッドを記述し、どのように描画するためにすべき?

答えて

20
<% 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、そしてそれはあなたが色との関係を持っていると仮定しているためcolor.nameの代わりにCOLOR_IDを使用。

+0

こんにちは、お返事ありがとうございます。コンソールを通して、それは期待通りに動作しますが、UIを使って '# {#<ストレージID:1、名前:"倉庫 "、updated_at:" 2011-11-08 21:18:07 "> => [#<在庫ID:1、product_id:1、color_id:10、storage_id:1、in_stock:5.0>、#<在庫ID:586、product_id:1、color_id:1、storage_id:1、in_stock: #>] ... 'それは関係について不平を言うが、どちらが確実かはわからないようだ。何か案が? – Gaelle

+0

@Gaelle ERBを使用するための私の答えとこのコメントからのいくつかの手がかりを更新しました。より多くの問題がある場合は、より説明的にしてください。エラーメッセージが表示された場合は、投稿してください。 – Unixmonkey

1

あなたの投稿には十分な情報がありませんが、これはおそらく何か?

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}"