Ruby on Rails link_to с методом put - PullRequest
       5

Ruby on Rails link_to с методом put

23 голосов
/ 16 февраля 2012

Я новичок в Rails и пытаюсь использовать помощник link_to для создания ссылки, которая выдает запрос PUT вместо запроса GET.В частности, я пытаюсь создать ссылку, которая активирует учетную запись пользователя в моем приложении из панели администратора.Я использую Rails 3.0.5.

В моем файле rout.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 с нужным мне поведением?

Ответы [ 2 ]

33 голосов
/ 16 февраля 2012

Обновлено - Помощник 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. документы содержат дополнительную информацию о link_to помощник.

32 голосов
/ 16 февраля 2012

link_to считает, что :method => :put является частью хэша пути. Вы должны сказать это иначе. Оберните свой путь в скобках.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put

Теперь link_to распознает :method => :put как параметр, а не часть пути ссылки.

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

...