Как Rails 3 "data-method =" удалить "" Деградация Изящно?

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?

Ответ 1

Изменения, внесенные ими в Rails 3 с этими атрибутами data-, были не о грациозном деградации, а о ненавязчивом JavaScript.

В Rails 2 указание :method => :delete по ссылке создаст целую кучу встроенного JavaScript, который создаст форму со скрытым вводом и затем отправит форму. Это было то же самое, что и сейчас: выключите JavaScript и по умолчанию задайте запрос GET. Таким образом, поддержка JavaScript без JavaScript такая же, как и раньше.

Один из вариантов заключается в использовании формы/кнопки вместо ссылки, поэтому вы можете включить этот метод в скрытое поле, как это делает Rails 2 JavaScript. Другой вариант - иметь версию GET, чтобы перейти на промежуточную страницу, которая, в свою очередь, имеет форму/кнопку.

Преимущество нового подхода в том, что оно ненавязчиво. JavaScript для изменения HTTP-глагола существует во внешнем файле и использует атрибуты data- для определения того, к каким элементам он должен быть привязан.

Ответ 2

Вместо использования метода link_to, для чего вам потребуется использовать JavaScript, чтобы гарантировать, что метод HTTP DELETE - использовать метод button_to, который создаст форму со скрытым элементом ввода, который сообщает Rails для обработки HTTP-метода как DELETE, а не POST. Если необходимо, вы можете использовать CSS для стилизации кнопки в форме, чтобы она выглядела как ссылка.

Ответ 3

Единственный шанс, который у вас есть, - определить форму. Ссылка не может быть POST с _method = "delete" без Javascript или по форме.

Ответ 4

Это невозможно без javascript.

Я создаю небольшой плагин jQuery для преобразования атрибута data-method link в псевдо скрытые формы (например, в проекте laravel).

Если вы хотите использовать его: https://github.com/Ifnot/RestfulizerJs