2010-11-23 13 views
4

J'ai une relation de plusieurs à plusieurs entre deux modèles, l'ordre et le produit. Une table de jointure appelée Lignes permet aux utilisateurs d'ajouter des quantités aux produits qu'ils souhaitent commander.Rails 3 - Vue d'index sur les ressources imbriquées

J'ai des produits imbriqués dans les ordres pour que mes itinéraires ressemblent à ce qui suit:

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

J'ai pu aller avec succès à l'index (commandes/id/produits) si mon index.html.erb est juste un espace réservé, cependant, en essayant d'afficher des données, j'ai des problèmes.

Mes produits table qui est la moindre erreur (sur le <% @ products.each ... ligne) se présente comme suit:

<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 %> 

Ma méthode d'index se présente comme suit:

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 

L'erreur indique que mon objet @products est nul; Cependant, dans la console Product.all renvoie 4 éléments.

Je suis un newb et c'est la première fois que je référence des ressources imbriquées, est-il possible que j'essaie simplement de l'appeler incorrectement en utilisant la variable d'instance @products?

Merci

Répondre

3

1) Avez-vous des produits dans votre base de données? Il est bon de vérifier si vous avez l'aide: @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) Je suppose que vous voulez montrer que les produits de cet ordre. Si vous le faites, alors vous devriez écrire:

@products = @order.products 

au lieu de

@products = Product.all