Rails pass: id с параметрами - PullRequest
2 голосов
/ 15 июля 2010

Использование rails button_to helper Я пытаюсь запустить метод update в контроллере. Мне нужно установить идентификатор объекта, который обновляется вручную. Я думаю, что код, который я имею, должен быть правильным, но rails продолжает пытаться поместить ID как часть маршрута.

в представлении:

button_to ">", :controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person

в контроллере:

  def update
    @person = Person.find(params[:id])
    #...rest of method
  end

Метод обновления контроллера никогда не выполняется. Ошибка в веб-браузере:

Unknown action

No action responded to 3. Actions: create, index, new, search, show, and update

'3' было значением currently_viewing_person

Как правильно передать :id, чтобы обновление можно было извлечь из params[:id]

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

button_to по умолчанию использует POST. Для обновления вам нужен PUT, поэтому передайте метод вместе с другими параметрами:

button_to ">", 
  { :controller=>'people', :action=>'update',
    'person'=>{:team=>team_leader.team}, 
    :id=>currently_viewing_person }, 
  :method => :put

Обратите внимание, что метод должен быть передан как отдельный хеш

0 голосов
/ 15 июля 2010

Здесь снова читаем документацию и понимаем, что в архитектуре REST обновление отправляется через PUT, а не POST. Правильный код просмотра:

button_to ">", {:controller=>'people', :action=>'update', 'person'=>{:team=>team_leader.team}, :id=>currently_viewing_person}, :method => :put

Странно, если я просматриваю источник на этой странице, форма, созданная button_to, показывает POST используемое:

<form method="post" ...

Но журнал рельсов подтверждает, что PUT действительно использовался:

Processing PeopleController#update (for 127.0.0.1 at 2010-07-15 00:10:09) [PUT]
...