2010-07-15 3 views
2

Использование рельсов button_to помощник Я пытаюсь запустить метод update в контроллере. Мне нужно установить идентификатор обновляемого объекта вручную. Код, который у меня есть, я думаю, должен быть прав, но рельсы продолжают ставить ID как часть маршрута.Rails pass: 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]

ответ

3

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

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

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

0

Вот снова чтение документации , и понимая, что в архитектуре 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] 
+1

Хеха - вы бьете меня секунды:) Причина '

«put» или somesuch. – zetetic

Смежные вопросы