在Rails 3视图中,删除链接发送“Get”而不是“Delete”

我正在使用Rails 3,并有一个从数据库中输出post列表的页面。 我希望能够从链接中删除post。

下面的第二个例子工作,但第一个没有。 有人知道为什么第一个不行? 我的观点包含:

# this link sends a "GET" request which asks for the #show function <%= link_to 'Delete', post, :method => :delete %> # this link sends the proper "DELETE" request which asks for the #destroy function <%= button_to 'Delete', post, :method => :delete %> 

我的路线文件包含以下内容:

 resources :posts 

确保布局中的<head>部分包含以下内容:

 <%= javascript_include_tag :defaults %> <%= csrf_meta_tag %> 

在Rails 3中,正在使用JavaScript的帮助下处理删除请求,以确保请求被正确发送。 如果您没有csrf元标记和所需的JavaScript代码,删除链接将不起作用。 :defaults JavaScript文件包括prototype.js和application.js。 后者包含使链接工作的东西,但依赖于Prototype框架。

如果您不想使用默认的Prototype JavaScript库,那么有几个其他框架的application.js的端口。 例如,你可以在这里findjQuery的一个。

无论JavaScript如何,button仍然可以工作,因为button_to生成的HTML代码本身包含了所有必要的信息。 这就是为什么你看到button的工作,而链接没有。

好像

 <%= javascript_include_tag :defaults %> 

不再支持

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

相反,你应该使用

 <%= javascript_include_tag 'application' %> 

在我的情况下,我正在使用以下。

 <%= javascript_include_tag :defaults %> <%= csrf_meta_tag %> 

我还通过在默认的原型JS下包含jQuery来使用jQuery。 这是造成某种冲突。

破坏性行为应作为表单提交进行 – http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

您可以针对删除方法或使用表单适当地设置button样式。

这将工作。 问题是,你需要通过正确的path,所以路线得到它。

 <%= link_to 'Delete', post_path(post.id), :method => :delete %> 

试试这个..它是一个简单的改变..

添加到你的route.rb文件

get'/ lists /:list_id / comments /:id'=>'comments#destroy'

我做了这个改变,现在它的工作..