我有嵌套資源如下:Rails的:路線傭工嵌套資源
resources :categories do
resources :products
end
按照Rails Guides,
你也可以用一組對象的使用url_for,和Rails自動將確定你想要哪條路線:
<%= link_to 'Ad details', url_for([@magazine, @ad]) %>
在這種情況下,Rails會看到@magazine是一本雜誌,@ad是n Ad,因此將使用magazine_ad_path幫助程序。在這樣的link_to助手,你可以代替全url_for調用僅指定對象:
<%= link_to 'Ad details', [@magazine, @ad] %>
進行其他操作,你只需要插入動作名稱作爲數組的第一個元素:
<%= link_to 'Edit Ad', [:edit, @magazine, @ad] %>
在我的情況,我有以下的代碼這是完全正常:
<% @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 %>
顯然,這是一個有點過於版本玻色,我想用導軌上面提到的技巧縮短它。
但是,如果我改變了顯示和編輯鏈接如下:
<% @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 %>
兩個人都沒有工作多提了,該頁面抱怨同樣的事情:
NoMethodError in Products#index
Showing /root/Projects/foo/app/views/products/index.html.erb where line #16 raised:
undefined method `persisted?' for 3:Fixnum
什麼我錯過了嗎?
如果你做'[product,product.category]'('Show'url),它會工作嗎? –