2010-09-23 31 views
38

我正在使用Rails 3并且有一个输出数据库中的帖子列表的页面。我希望能够从链接中删除帖子。删除链接在Rails 3视图中发送“Get”而不是“Delete”

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

# 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 

回答

48

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

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

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

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

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

+0

伟大的答案。谢谢。 – 2010-09-23 03:37:08

+0

这对我有很大的帮助。 – Rupert 2011-01-04 06:59:13

+0

谢谢 - 你能发布一个链接,了解rails 3的这个特性的细节吗? – gorn 2011-04-21 01:18:15

3

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

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

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

17

看起来像

<%= javascript_include_tag :defaults %> 

不再支持

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

相反,你应该使用

<%= javascript_include_tag 'application' %> 
+0

这对于Rails 4.0.3来说是正确的。我尝试应用已接受的答案,直到我在这里指出替换为止,它才起作用。 – 2014-09-07 18:04:57

+0

救了我的培根! – brntsllvn 2015-10-05 04:06:47

+0

这应该是公认的答案!谢谢! – 2015-11-04 01:24:15

0

这将工作。问题在于你需要将它传递给正确的路径,以便路线获得它。

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

试试这个..它的一个简单变化..

添加到您的路线。RB文件

得到 '/列表/:LIST_ID /评论/:身份证'=> '评论#摧毁'

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

+2

GET请求永远不会是一个好主意,可以进行持久更改 – Vincent 2017-05-05 18:42:18