"Нет ссылок на маршрут [POST]" при изменении link_to на button_to

У меня есть эта часть кода:

<%= link_to "New User", new_user_path, :class => "button"  %><br />

который отлично работает, но когда я его изменяю,

<%= button_to "New User", new_user_path, :class => "button"  %><br />

Я получаю эту ошибку

Нет совпадений маршрутов [POST] "/users/new"

Любая помощь вообще будет оценена.

Ответы

Ответ 1

Иисус Родригес прав относительно POST и GET, но если вам действительно нужна кнопка, вы можете просто переопределить метод по умолчанию:

<%= button_to "New User", new_user_path, :class => "button", :method => :get  %>

Ответ 2

"link_to" ищет /users/new, используя GET.

"button_to" ищет /users/new, используя POST

Если вы создаете маршруты для контроллера, используя:

resources :user

По умолчанию /users/new является GET, а не POST, поэтому вторая строка не находит никакого маршрута.

Если вы думаете изменить это действие на POST, я думаю, что вы должны забыть об этом.

Ответ 3

Вместо того, чтобы принудительно использовать button_to для использования метода, отличного от значения по умолчанию, вы также можете отправить класс link_to.

<%= link_to "New User", new_user_path, :class => "button" %>

Ответ 4

button_to по умолчанию - POST, а link_to по умолчанию - GET, поэтому links_to работал. Вы можете заставить button_to использовать GET:

<%= button_to "New User", new_user_path, :class => "button", :method => :get %>

Вы можете получить дополнительную информацию о параметрах button_to здесь: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-button_to