How Does Rails 3's “data-method='delete

2019-01-17 05:53发布

Rails 3 does some cool stuff to make Javascript unobtrusive, so they've done things like this:

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

..converts to

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

But it just occurred to me.. When I turn off javascript the method isn't DELETE anymore, it's GET as expected. So are there plans to, or is there some way to, allow these data- attributes to degrade gracefully, so that link still is a DELETE request?

4条回答
Animai°情兽
2楼-- · 2019-01-17 06:26

Rather than using the link_to method -- which would require you use JavaScript to ensure that the HTTP method is DELETE -- use the button_to method, which will create a form with a hidden input element which tells Rails to treat the HTTP method as DELETE rather than POST. If necessary, you can then use CSS to style the button in the form so that it looks like a link.

查看更多
仙女界的扛把子
3楼-- · 2019-01-17 06:27

It is not possible without javascript.

I make a small jQuery plugin for converting data-method link attribute to pseudo hidden forms (used in laravel project for example).

If you want to use it : https://github.com/Ifnot/RestfulizerJs

查看更多
成全新的幸福
4楼-- · 2019-01-17 06:32

The only chance you have is define a form. A link can't be a POST with _method="delete" without Javascript or by form.

查看更多
三岁会撩人
5楼-- · 2019-01-17 06:35

The change they made in Rails 3 with these data- attributes wasn't about graceful degradation, it was about unobtrusive JavaScript.

In Rails 2, specifying :method => :delete on a link would generate a whole bunch of inline JavaScript that would create a form with a hidden input and then submit the form. That was the same as it is now: turn off JavaScript and it defaults to a GET request. As such, supporting the case of no JavaScript is the same as it was before.

One option is to use a form/button instead of a link so you can include the method as a hidden field, much like the Rails 2 JavaScript does. Another option is to have the GET version take you to an intermediate page which in turn has the form/button.

The benefit of the new approach is that it's unobtrusive. The JavaScript for changing the HTTP verb exists in an external file and uses the data- attributes to determine which elements it should be attached to.

查看更多
登录 后发表回答