Вред в том, что пользователь может легко перейти по этому URL и выполнить потенциально разрушительное действие.
/noform/edit #URL typed by user => Action Performed
/noform/update #URL typed by user => Error is thrown, No Action Performed
В обычном режиме просмотра на сервер генерируется GET
запросов. Предполагается, что любая страница, на которую можно легко перейти (или ввести в адресную строку), не будет выполнять никаких функций изменения данных.
Запрос POST
, сгенерированный посредством отправки формы или запроса AJAX, ожидает результат изменения данных на сервере.
Аналогично, две "рельсовые" версии rails PUT
и DELETE
также не являются действиями, к которым можно просто перейти с помощью браузера.
Решение
Решение состоит в том, чтобы иметь только действие update
, и там, где вы изначально были бы связаны с edit
, используйте что-то вроде следующего:
button_to "Add new tracker", noform_path, :method => :put
Если есть какой-либо тип ошибки, вам все равно может понадобиться путь редактирования, чтобы показать пользователю, что он может что-то исправить. Но из того, что вы описали, одно действие update
должно сработать.