2010-11-23 8 views
4

Ich habe eine viele zu viele Beziehung zwischen zwei Modellen, Bestellung und Produkt. Es gibt eine Verbindungstabelle namens Lines, mit der Benutzer den Produkten, die sie bestellen möchten, Mengen hinzufügen können.Schienen 3 - Indexansicht auf verschachtelten Ressourcen

habe ich die Produkte innerhalb Aufträge verschachtelt so meine Routen wie folgt aussehen:

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

ich in der Lage habe erfolgreich auf den Index zu gehen (Aufträge/id/Produkte), wenn meine index.html.erb ist nur ein Platzhalter, aber beim Versuch, Daten anzuzeigen, habe ich Probleme.

Meine Produkte Tabelle, die erroring geführt wird (auf der <% @ products.each ... Zeile) sieht wie folgt aus:

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

sieht mein Index-Methode wie folgt aus:

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 

Der Fehler besagt, dass mein @ products-Objekt null ist; In der Konsole gibt Product.all jedoch 4 Elemente zurück.

Ich bin ein Newb und das ist mein erstes Mal Referenzen geschachtelte Ressourcen, ist es möglich, ich versuche einfach, es falsch mit der Instanzvariablen @products zu nennen?

Dank

Antwort

3

1) Haben Sie keine Artikel in Ihrer Datenbank? Es ist gute Idee zu überprüfen, ob Sie mit haben: @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) Ich nehme an, Sie nur Produkte aus dieser Reihenfolge angezeigt werden sollen. Wenn Sie das tun, dann sollten Sie schreiben:

@products = @order.products 

statt

@products = Product.all