Rails3 button_to вызывает POST-действие, пытается вызвать PUT-действие - PullRequest
8 голосов
/ 16 ноября 2010

У меня есть button_to, для которого я хочу выполнить действие PUT (есть только одна вещь, которая может быть обновлена ​​об этом ресурсе - он будет обновлен как «подтвержденный», поэтому нет других полей формы, связанных с выполнением действие).

Это на мой взгляд (контроллер указан явно, потому что кнопка находится на виде, который принадлежит другому контроллеру):

<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %>

В моем файле маршрутов ресурс объявлен как ресурс отдыха:

  resources :practice_sessions

Контроллер для этого ресурса имеет действие создания и обновления, а button_to выше вызывает действие создания. Я хочу, чтобы это вызывало действие обновления.

Это происходит через журнал непосредственно перед тем, как сработает действие create:

Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000
  Processing by PracticeSessionsController#create as HTML
  Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"}

Ответы [ 3 ]

18 голосов
/ 17 ноября 2010

Ваш синтаксис немного отключен. button_to принимает три аргумента: заголовок кнопки, хеш options и хеш html_options. :method=>:put необходимо ввести html_options, а параметры маршрута - options. Таким образом, вы можете переписать так:

<%= button_to "Acknowledged", { :controller => 'practice_sessions',
  :id => @practice_session.id}, 
  :method => :put %>

При нажатии запрос должен быть обработан PracticeSessionsController#update

2 голосов
/ 17 ноября 2010

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

<%= button_to "Acknowledge", practice_session_path(@practice_session), :method => :put %>
1 голос
/ 17 ноября 2010

Возможно, вам потребуется явно передать аргумент :method => :put в хэш html_options - возможно, он попадет в хэш options.

Попробуйте это:

<%= button_to "Acknowledged", { :controller => 'practice_sessions', :id => @practice_session.id }, :method => :put %>

(Обратите внимание на явные скобки вокруг :controller и :id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...