Ruby on Rails link_to С помощью метода put
Я новичок в Rails, и я пытаюсь использовать помощник link_to для создания ссылки, которая выдает запрос PUT вместо запроса GET. В частности, я пытаюсь создать ссылку, которая активирует учетную запись пользователя в моем приложении с панели администратора. Я использую Rails 3.0.5.
В файле моих маршрутов .rb есть:
match '/admin/users/:id/activate' => 'admin#activate_user',
:action => :activate_user, :via => :put
У моего представления есть:
link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put
Однако это генерирует URL (например) /admin/users/7/activate?method=put
с исходным кодом <a href="/admin/users/7/activate?method=put">Activate</a>
.
Я хотел бы сгенерировать вместо этого <a href = "/admin/users/7/activate" data-method="put">Activate</a>
Я понимаю, что могу использовать button_to, но я некоторое время боролся с этой проблемой, и я смущен, почему я вижу это поведение, когда в других учебниках говорится, что то, что я делаю, должно быть действительным. Как я могу создать помощник link_to с поведением, которое я хочу?
Ответы
Ответ 1
Обновлено - помощник link_to
выполнит GET, если не указан метод.
Лучше указать точный тип запроса вместо match
в вашем файле маршрутов. Как насчет замены match
на put
в маршрутах как:
put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user'
link_to 'Activate', activate_user_path(user.id), method: :put
Метод activate_user
должен находиться в контроллере admins
.
docs содержит дополнительную информацию об link_to
помощнике.
Ответ 2
link_to
считает, что :method => :put
является частью хэша пути. Вы должны сказать об этом иначе. Заверните свой путь в скобках.
link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put
Теперь link_to
распознает :method => :put
как параметр, а не часть пути ссылки.
Как побочная заметка, вы должны попытаться использовать помощники маршрута вместо хэшей пути, когда это возможно. Сохраняет все хорошее и аккуратное, и избегает подобных ситуаций.