Подтвердить что ты не робот

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 с поведением, которое я хочу?

4b9b3361

Ответ 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 как параметр, а не часть пути ссылки.

Как побочная заметка, вы должны попытаться использовать помощники маршрута вместо хэшей пути, когда это возможно. Сохраняет все хорошее и аккуратное, и избегает подобных ситуаций.