36

Rails 3 做了一些很酷的事情来使 Javascript 不显眼,所以他们做了这样的事情:

= link_to "Logout", user_session_path, :method => :delete

..转换为

<a href="/logout" data-method="delete" rel="nofollow">Logout</a>

但它只是发生在我身上.. 当我关闭 javascript 时,该方法不再是 DELETE,它是 GET 正如预期的那样。那么是否有计划或有什么方法可以让这些data-属性优雅地降级,以便该链接仍然是一个 DELETE 请求?

4

4 回答 4

37

他们在 Rails 3 中使用这些data-属性所做的更改不是关于优雅降级,而是关于不显眼的 JavaScript。

在 Rails 2 中,指定:method => :delete链接会生成一大堆内联 JavaScript,这些 JavaScript 会创建一个带有隐藏输入的表单,然后提交该表单。这和现在一样:关闭 JavaScript,它默认为 GET 请求。因此,支持无 JavaScript 的情况与以前相同。

一种选择是使用表单/按钮而不是链接,这样您就可以将方法作为隐藏字段包含在内,就像 Rails 2 JavaScript 所做的那样。另一种选择是让 GET 版本将您带到一个中间页面,该页面又具有表单/按钮。

新方法的好处是它不引人注目。用于更改 HTTP 谓词的 JavaScript 存在于外部文件中,并使用data-属性来确定应附加到哪些元素。

于 2010-05-11T09:21:31.113 回答
21

不要使用该link_to方法——这需要您使用 JavaScript 来确保 HTTP 方法是正确的DELETE——使用该button_to方法,它将创建一个带有隐藏输入元素的表单,告诉 Rails 将 HTTP 方法视为DELETE而不是POST. 如有必要,您可以使用 CSS 为表单中的按钮设置样式,使其看起来像一个链接。

于 2011-05-18T21:19:54.240 回答
4

你唯一的机会是定义一个表格。链接不能是 _method="delete" 没有 Javascript 或表单的 POST。

于 2010-05-11T09:14:12.423 回答
1

没有javascript是不可能的。

我制作了一个小型 jQuery 插件,用于将data-method链接属性转换为伪隐藏表单(例如在 laravel 项目中使用)。

如果你想使用它:https ://github.com/Ifnot/RestfulizerJs

于 2014-02-19T14:32:13.233 回答