Как рельсы 3's "data-method = 'удаляют" "ухудшаются изящно?
Вопрос
Rails 3 делает несколько классных вещей, чтобы сделать JavaScript ненавязчивым, поэтому они сделали такие вещи:
= link_to "Logout", user_session_path, :method => :delete
..Коверты к
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
Но это только что произошло для меня .. Когда я выключаю JavaScript, метод больше не удаляет, он должен быть, как ожидалось. Так есть ли планы, или есть ли какой-то способ, позволить этим data-
Атрибуты изящно ухудшаются, так что ссылка все еще является удалением запроса?
Решение
Изменения, которые они сделали в рельсах 3 с этими data-
Атрибуты не было огражденной деградации, именно о ненавязчивом JavaScript.
В рельсах 2, указав :method => :delete
По ссылке будет генерировать целую кучу inline JavaScript, который создаст форму с скрытым входом, а затем отправить форму. Это было так же, как сейчас: выключите JavaScript и по умолчанию по умолчанию на получение запроса. Таким образом, поддерживая случай отсутствия JavaScript, такой же, как раньше.
Одним из вариантов является использование формы / кнопки вместо ссылки, поэтому вы можете включить метод в качестве скрытого поля, подобное Rails 2 JavaScript. Другой вариант состоит в том, чтобы версию получить версию получить на промежуточную страницу, которая, в свою очередь, имеет форму / кнопку.
Преимущество нового подхода заключается в том, что он ненавязчих. JavaScript для изменения HTTP VELB существует во внешнем файле и использует data-
атрибуты, чтобы определить, к какому элементам его следует прикрепить.
Другие советы
Вместо того, чтобы использовать link_to
метод - который потребует, чтобы вы использовали JavaScript, чтобы убедиться, что метод HTTP DELETE
-- использовать button_to
Способ, который создаст форму с скрытым входным элементом, который говорит рельсам лечить метод HTTP как DELETE
скорее, чем POST
. Отказ При необходимости вы можете использовать CSS для стиля кнопки в форме, чтобы она выглядела как ссылка.
Единственный шанс, который у вас есть, определяют форму. Ссылка не может быть пост с _method = "delete" без JavaScript или по форме.
Это невозможно без JavaScript.
Я делаю небольшой плагин jQuery для преобразования data-method
Атрибут ссылки на псевдо скрытые формы (например, в проекте Laravel).
Если вы хотите использовать его: https://github.com/ifnot/restfuliverjs.