Может показаться, что Rails не поддерживает встроенные ссылки для не-GET запросов. Изначально система лесов Rails использует встроенные ссылки для удаления.
Хотя rails.js
совершенно адекватно добавляет токены csrf перед отправкой запроса на удаление, браузеры без Javascript полностью пропускают этот шаг и вместо этого просто отправляют GET-запрос собственно ресурсу.
Мое текущее приложение также разработано таким образом, что другие не-GET-запросы будут инициироваться из встроенных ссылок.
Нерешенное решение, которое я придумал, состояло в том, чтобы создать аналог «удаления представления» для #destroy
, поскольку #new
для #create
и #edit
для #update
, а затем просто иметь форму для выполнить логику, делегируя установку csrf конструктору форм (что он делает из коробки).
Проблема с этим решением состоит в том, что требуется больше шагов, чем идеально. Очевидно, что мы можем сказать, что неудобства не слишком велики, и если вы используете не-JS браузер, вы, вероятно, можете смириться с менее современным UX. Но я бы хотел найти лучшее решение.
Итак, что пришло в голову, это использовать формы вместо ссылок. Единственная проблема заключается в том, что единственный способ отправить форму в браузере, отличном от JS, - это нажать кнопку «Отправить». Но input type="submit"
является заменяемым элементом и не соответствует стилю обычного элемента. Попытка заставить это выстроить кросс-браузер с обычным встроенным или встроенным блоком текста была разочаровывающим упражнением.
Так, каков наилучший способ сделать это? И есть ли какая-то серьезная причина, по которой скаффолды Rails не работают в готовых браузерах не из JS?