为什么Rails中的"link_to"无法用于删除操作?

9
index.html.erb文件中,我展示了所有的产品,并在每个产品旁边放置了编辑删除操作。
<% @products.each do |product| %>
  ...
  <%= link_to("Edit", edit_product_path(product.id), :class => 'action') %>
  <%= link_to("Delete", product, :method => :delete, :class => 'action') %>
  ...
<% end %>

Edit链接正常工作,但Delete链接无法正常工作。我收到以下错误:

Unknown action
The action 'show' could not be found for ProductsController

我猜是因为请求方法是GET而不是DELETE。但是,如果我明确设置:method => :delete,我不知道为什么会这样发生。

routes.rb非常简单:

root :to => "products#index"
resources :products

我已启用了Javascript。
请建议。

你尝试过添加show操作吗?即使你没有使用它,这样你的路由也会被覆盖。只是一个想法。 - Richard
你的控制器里有删除操作吗?另外,尝试使用rake:route命令来查看删除路径是否正确定义。 - ranendra
4个回答

13

您是否在 javascript_include_tag 中指定了 rails.js?这是使不显眼的 DELETE 方法工作所必需的。如果您使用的是 jQuery,则也有 相关解决方案。


在页面源代码中,我看到已加载了 rails.js。我使用的是 jQuery 1.4.4。这会有问题吗?我只是从官方网站下载并放置在 javascript_include_tag 中。我应该用你们链接中的文件替换它吗?我应该下载什么? - Misha Moroshko
2
@Misha:在src目录中下载rails.js文件,并将其放入public/javascripts文件夹中作为rails.js。如果您正在使用jQuery,则必须使用jQuery等效的替换Prototype rails.js - Ryan Bigg
@Ryan:非常感谢您的指导!如果我使用jQuery而不是Prototype,我是否仍然需要javascript_include_tag :defaults - Misha Moroshko
1
@Misha:你可以使用_config/application.rb_中的以下代码更改默认设置 config.action_view.javascript_expansions[:default] = ["jquery", "rails"] - Ryan Bigg
@Ryan:不错!那么,你建议更改默认设置并删除 javascript_include_tag 'jquery-1.4.4.min.js','rails.js',对吗?但是,Rails将如何知道要使用哪个jQuery文件/版本? - Misha Moroshko
显示剩余2条评论

5
不要忘记在您的application.js文件中包含jquery_ujs
//
//= require jquery
//= require jquery_ujs
// ...

2
在你的删除链接中,需要使用 product_path(product) 而不是 product

链接标签的最终HTML长什么样? - Peter Brown
<a rel="nofollow" data-method="delete" class="action" href="/products/73">Delete</a> - Misha Moroshko

0

我曾经遇到过同样的问题 - 实际上我已经将我的旧“删除”操作更改为“销毁”,但是忘记了如果您正在使用SSL..(例如ssl_required:destroy)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接