Rails 3的"data-method ='delete'"如何优雅地降级?

Lan*_*ard 36 ruby-on-rails graceful-degradation unobtrusive-javascript ruby-on-rails-3

Rails 3做了一些很酷的东西,让Javascript不引人注目,所以他们做了这样的事情:

= link_to "Logout", user_session_path, :method => :delete
Run Code Online (Sandbox Code Playgroud)

..转换为

<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
Run Code Online (Sandbox Code Playgroud)

但它只是发生在我身上..当我关闭javascript时,方法不再是DELETE,它是按预期获得的.那么是否有计划或者有某种方法允许这些data-属性优雅地降级,以便链接仍然是DELETE请求?

Jim*_*dra 37

他们在Rails 3中使用这些data-属性所做的改变并不是关于优雅的降级,而是关于不引人注目的JavaScript.

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

一种选择是使用表单/按钮而不是链接,因此您可以将该方法包含为隐藏字段,就像Rails 2 JavaScript一样.另一个选择是让GET版本带你到一个中间页面,而中间页面又有表格/按钮.

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


小智 21

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