Rails:为嵌套资源路由助手

w

我有如下嵌套资源:

resources :categories do
  resources :products
end

根据Rails指南

您还可以将url_for与一组对象一起使用,Rails会自动确定所需的路由:

<%= link_to 'Ad details', url_for([@magazine, @ad]) %>

在这种情况下,Rails将看到@magazine是杂志,而@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 %> 

显然,这有点太冗长,我想使用上述Rails指南中提到的技巧来缩短它。

但是,如果我按如下所示更改了“显示编辑”链接:

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

我错过了什么?

罗伯·怀斯

通过检查为类传递的对象,然后寻找名称匹配的控制器,Rails可以“自动地”知道要使用的路径。因此,您需要确保传递给link_to帮助者的是实际的模型对象,而不是像category_id只是一个对象,fixnum因此没有关联的控制器。

<% @products.each do |product| %>
  <tr>
    <td><%= product.name %></td>
    <td><%= link_to 'Show', [product.category, product] %></td>
    <td><%= link_to 'Edit', [:edit, product.category, product] %></td>
    <td><%= link_to 'Destroy', [product.category, product], method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有资源的 Laravel 路由助手

来自分类Dev

在Rails 4中未为嵌套资源检测到路由

来自分类Dev

嵌套资源的Rails路由索引

来自分类Dev

嵌套资源时的Rails路由

来自分类Dev

嵌套资源的Rails路由索引

来自分类Dev

Rails 嵌套资源路由错误

来自分类Dev

AngularJS路由助手

来自分类Dev

Rails 3.2。路由助手生成无效链接

来自分类Dev

Rails 4-嵌套资源路由

来自分类Dev

如何在助手中嵌套Rails标签?

来自分类Dev

嵌套资源的Rails路由和自定义路由

来自分类Dev

Rails助手,串联

来自分类Dev

定制的Rails * _for助手?

来自分类Dev

Rails助手类

来自分类Dev

Rails助手:时事

来自分类Dev

如何在Rails中使用2个关系关系更新嵌套资源的脚手架生成的MVC +路由

来自分类Dev

生成完整的资源丰富的路径,仅将最后一个资源提供给路由助手

来自分类Dev

表单,嵌套资源和路由错误Rails 4

来自分类Dev

Rails路由-嵌套资源URL的上下文

来自分类Dev

嵌套资源的命名路由

来自分类Dev

组装把手嵌套的数学助手

来自分类Dev

如何将资源映射到Rails中的多个助手?

来自分类Dev

Rails在部分使用助手

来自分类Dev

Ruby on Rails表单助手

来自分类Dev

Ruby on Rails的表单助手

来自分类Dev

Rails图像标签助手

来自分类Dev

Ruby on Rails表单助手

来自分类Dev

RSpec Rails语法助手

来自分类Dev

Rails:如何将全局变量从路由传递到控制器和助手?