4

我有两个链接:

<%= link_to("Edit", edit_product_path(product.id)) %>
<%= link_to("Delete", product, :method => :delete) %>

生成的链接是:

<a href="/products/81/edit">Edit</a>
<a href="/products/81" data-method="delete" rel="nofollow">Delete</a>

同时单击 onEdit和 on 时Delete,使用该GET方法。

Rails 如何决定使用哪种方法?

data-method="delete"链接中的含义和rel="nofollow"含义是什么Delete

4

3 回答 3

7

浏览器通常支持 GET 和 POST HTTP 方法。_method为了模拟 PUT 和 DELETE 动词,Rails在提交表单时注入了一个特殊参数。

您可以通过传递选项来指定要使用的方法:method,就像您所做的那样。

<%= link_to("Action with DELETE", path_to_something, :method => :delete) %>
<%= link_to("Action with PUT", path_to_something, :method => :put) %>

除非指定,否则默认值为GET

从 Rails 3 开始,Rails 使用不显眼的 JavaScript 来处理 DELETE 方法。data-method它在属性中传递 HTTP 动词,这是一个HTML 5 特性

在您的情况下,它不起作用,因为您可能忘记包含 JavaScript 库(例如 Prototype 或 jQuery)和 Rails 适配器。

确保您使用的是 jQuery 或 Prototype,并且包含了rails.jsjavascript 文件。另外,不要忘记添加csrf_meta_tag.

<%= csrf_meta_tag %>

如果你想学习 move,几个月前我写了一篇关于Rails 3 中的 Unobtrusive JavaScript的文章。

于 2010-12-15T11:06:24.223 回答
0

有趣的。我可以确认带有 ":method => :delete" 选项的 link_to 在默认脚手架中确实有效。但是,在尝试构建没有脚手架的项目时,我无法让 link_to 工作。button_to 没有问题,使用与 link_to 失败的相同参数。

在我的 HEAD 标记中,我有所需的 javascript 包括:

javascript_include_tag :defaults
csrf_meta_tag

很混乱。我无法弄清楚使 link_to 工作的“秘诀”脚手架发挥了什么作用。虽然 Rob 断言 link_to delete 在 Rails 3 中不起作用,但在技术上可能并不准确,但我发现它实际上是准确的。谢谢罗布,我被困了好几个小时才看到你的帖子。

于 2011-02-13T00:57:10.497 回答
-1

您不能在 rails 3 中使用链接进行删除您需要使用 button_to 例如。

<%= button_to("Delete", product, :method => :delete) %>
于 2010-12-15T10:46:05.313 回答