Rails 4.1 link_to delete提供了错误的路径

时间:2014-06-19 12:59:44

标签: ruby-on-rails-4

由于某种原因,我无法获得一个非常简单模型的销毁操作的正确路径。我的期望不正确吗?

我的routes.rb包括:

resources :designs

我的观点包含:

<% @designs.each do |design| %>
<%= link_to "Delete", design, :method => :delete %>
<% end %>

这导致了HTML:

<a data-method="delete" href="/designs.49" rel="nofollow">Delete</a>

当然出现错误
"No route for [DELETE] for /designs.49"

当我期待渲染的HTML为:

<a data-method="delete" href="/designs/49" rel="nofollow">Delete</a>

特别是考虑到rake路线让我看到:

 DELETE /designs/:id(.:format)                      designs#destroy

我的解决方法是替换:link_to“删除”,设计...用:link_to“删除”,“/ designs /#{design.id}”......(工作正常),但我肯定会俯瞰一些基本的东西,因为没有人应该浪费这么多时间来弄清楚破坏行动的绝对最基本的基线情况。

2 个答案:

答案 0 :(得分:1)

视图中的代码可以使用_path帮助程序读取:

<% @designs.each do |design| %>
  <%= link_to "Delete", design_path(design), :method => :delete %>
<% end %>

但我想我可以看到你想要完成的事情。要获得show操作,您应该可以执行此操作:

<% @designs.each do |design| %>
  <%= link_to "Show", design %>
<% end %>

我想知道这是否是Rails中的错误?如果你这样做会怎么样?

<% @designs.each do |design| %>
  <%= link_to "Delete", url_for(design), :method => :delete %>
<% end %>

答案 1 :(得分:0)

尝试在帮助器标签中替换它。

<%= link_to "Delete", design_path, :method => :delete %>