Как 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