Старые версии HTML поддерживают только GET
и POST
.Более новая версия включает PUT
, PATCH
и DELETE
, которые обрабатываются как XHR(XMLHttpRequest)
запросы или просто AJAX
запросы всеми основными веб-браузерами.
Когда запросы на PUTили PATCH или DELETE сделаны, Rails под капотом, с помощью Javascript обрабатывает эти запросы как XHR
запросы к клиенту.Когда Javascript в вашем приложении не работает или отключен, эти запросы будут возвращаться к GET
Теперь возвращаемся к вашему фрагменту кода, который не работает.У вас есть следующее
<%= button_to 'Delete', {:controller => :users, :action => 'destroy', :id => user.id}%>
button_to
по умолчанию создает форму и отправляет запрос как POST
, если только вы явно не переопределяете его, как вы делаете впервый случай с :method => :delete
.Таким образом, приведенный выше фрагмент кода генерирует URL-адрес, подобный users/1/
, но в виде POST
, который в конечном итоге дает сбой, поскольку у вас нет такого маршрута , определенного в routes.rb
Разве URL-адрес, который он разрешает считать пользователями / уничтожить / 1?
Нет, когда вы используете :method => :delete
в своем коде, сгенерированный URL-адрес будет users/1
, нозапрос отправляется как DELETE
, который в конечном итоге работает как действительный запрос в соответствии с вашими маршрутами , которые определены в routes.rb