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请求?
答案 0 :(得分:37)
他们在Rails 3中使用这些data-
属性所做的更改并不是关于优雅降级,而是关于不引人注目的JavaScript。
在Rails 2中,在链接上指定:method => :delete
会生成一大堆内联JavaScript,它们将创建一个带有隐藏输入的表单,然后提交表单。这和现在一样:关闭JavaScript并默认为GET请求。因此,支持不使用JavaScript的情况与以前一样。
一个选项是使用表单/按钮而不是链接,因此您可以将该方法包含为隐藏字段,就像Rails 2 JavaScript一样。另一个选择是让GET版本带你到一个中间页面,而中间页面又有表格/按钮。
新方法的好处在于它不引人注目。用于更改HTTP谓词的JavaScript存在于外部文件中,并使用data-
属性来确定应将哪些元素附加到其中。
答案 1 :(得分:21)
而不是使用link_to
方法 - 这需要您使用JavaScript来确保HTTP方法为DELETE
- 而不是使用button_to
方法,这将创建一个表单一个隐藏的输入元素,它告诉Rails将HTTP方法视为DELETE
而不是POST
。如有必要,您可以使用CSS来设置表单中的按钮样式,使其看起来像链接。
答案 2 :(得分:4)
您唯一的机会是定义表单。没有Javascript或表单,链接不能是_method =“delete”的POST。
答案 3 :(得分:1)
没有javascript就不可能。
我制作了一个小的jQuery插件,用于将data-method
链接属性转换为伪隐藏形式(例如在laravel项目中使用)。