2010-11-23 16 views
4

私は2つのモデルOrderとProductの間に多対多の関係を持っています。 Linesという結合テーブルがあり、ユーザは注文したい商品に数量を追加することができます。Rails 3 - ネストされたリソースのインデックスビュー

私のルートは、次のように見えるので、私は製品の受注内にネストされている

resources :orders do 
    resources :products, :controller => "products"  
    end 
end 

私は私のindex.html.erbがある場合に成功したインデックス(受注/ ID /製品)に行くことができました単にプレースホルダですが、データを表示しようとすると問題が発生します。 (<%する@ products.eachに...ライン)をerroringさ

マイProductsテーブルには、次のようになります。

<table> 
    <tr> 
    <th>URL</th> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @products.each do |product| %> 
    <tr> 
    <td><%= product.url %></td> 
    <td><%= link_to 'Show', product %></td> 
    <td><%= link_to 'Edit', edit_order_products_path(product) %></td> 
    <td><%= link_to 'Destroy', order, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 

私のインデックスメソッドは、次のようになります。

def index 
    @order = Order.find(params[:order_id]) 
    @products = Product.all  


    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @products } 
    end 
    end 

エラーは、私の@productsオブジェクトがnilであることを示しています。ただし、コンソールProduct.allで4つの項目が返されます。

私はnewbです。これは初めてネストされたリソースを参照しています。インスタンス変数@productsを使用して間違って呼び出している可能性がありますか?

ありがとう

答えて

3

1)データベースにはどの製品もありますか?私はあなたがこの順から製品のみを表示したいとします)@products.present?

<% if @products.present? %> 
    <% @products.each do |product| %> 
    <tr> 
    <td><%= product.url %></td> 
    <td><%= link_to 'Show', product %></td> 
    <td><%= link_to 'Edit', edit_order_products_path(product) %></td> 
    <td><%= link_to 'Destroy', order, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 
<% else %> 
<tr> 
    <td colspan=4>You don't have any products yet.</td> 
</tr> 
<% end %> 

2:それはあなたが任意の使用しているかどうかを確認することをお勧めします。そうした場合、あなたは書く必要があります。

@products = @order.products 

代わりの

@products = Product.all 
関連する問題