Ich habe Ressourcen verschachtelt wie folgt:Rails: Route Helfer für verschachtelte Ressourcen
resources :categories do
resources :products
end
Nach dem Rails Guides,
Sie auch mit einer Reihe von Objekten verwenden url_for können, und Rails automatisch bestimmen, welche Route Sie wollen:
<%= link_to 'Ad details', url_for([@magazine, @ad]) %>
In diesem Fall Rails werden sehen, dass @magazine ein Magazin und @ad ist ein n Ad und verwendet daher den Helfer magazin_ad_pfad. In Helfern wie link_to, können Sie einfach das Objekt anstelle des vollen url_for Anrufs angeben:
<%= link_to 'Ad details', [@magazine, @ad] %>
Für andere Aktionen, müssen Sie nur den Namen der Aktion als das erste Element des Arrays einzufügen:
<%= link_to 'Edit Ad', [:edit, @magazine, @ad] %>
In meinem Fall habe ich den folgenden Code die voll funktionsfähig war:
<% @products.each do |product| %>
<tr>
<td><%= product.name %></td>
<td><%= link_to 'Show', category_product_path(product, category_id: product.category_id) %></td>
<td><%= link_to 'Edit', edit_category_product_path(product, category_id: product.category_id) %></td>
<td><%= link_to 'Destroy', category_product_path(product, category_id: product.category_id), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
Natürlich ist es ein wenig zu ist ver Bose und ich wollte es mit dem oben genannten Trick aus Schienenführungen verkürzen.
Aber wenn ich änderte die anzeigen und bearbeiten Link wie folgt:
<% @products.each do |product| %>
<tr>
<td><%= product.name %></td>
<td><%= link_to 'Show', [product, product.category_id] %></td>
<td><%= link_to 'Edit', [:edit, product, product.category_id] %></td>
<td><%= link_to 'Destroy', category_product_path(product, category_id: product.category_id), method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
Keiner von ihnen nicht mehr funktioniert, und die Seiten beklagt das Gleiche:
NoMethodError in Products#index
Showing /root/Projects/foo/app/views/products/index.html.erb where line #16 raised:
undefined method `persisted?' for 3:Fixnum
Was habe ich vermisst?
Funktioniert es, wenn Sie '[product, product.category]' (für die 'Show' URL)? –