2010-08-22 2 views
0

Я стараюсь следовать правилам и оставаться RESTful, но я сталкиваюсь с некоторыми проблемами.Почему мой контроллер/Action не отвечает на: put?

Я установил свои маршруты, так что я уверен, что он называет правильное действие, когда я бегом рек маршрутов это приходит:

PUT /admin/settings {:controller=>"admin", :action=>"save_settings"} 

Так что я знаю, что мой путь является правильным, и в моих * просмотрах /admin/settings.html.erb»у меня есть следующие:

<% form_for(:settings, :html => { :method => :put },:builder => MyFormBuilder) do |f| %> 

И кажется, что все правильно делают (так как рельсы танцы вокруг PUT):

<form action="/admin/settings" method="post"> 
<input name="_method" type="hidden" value="put" /> 

Но когда я на самом деле нажимаю кнопку отправки, ничего не происходит. Для тестирования я просто сделать вспышку:

# PUT admin/settings 
def save_settings 
    flash[:notice] = 'Settings Saved' 
    render :action => 'settings' 
end 

И ничего не мигает. Думаю, я здесь накрыл свои базы, но я должен что-то забыть. пожалуйста, помогите RoR noob :)

+0

необходимо добавить «:.. URL => {: action => 'save_settings'} ', хотя моя маршрутизация в порядке – naspinski

ответ

1

Вы либо делаете то, что сказал Стив, либо если вы непреклонны, указав тип запроса в построителе форм, тогда вы должны использовать правильный синтаксис.

Попробуйте

`<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>` 

Это взято из документации рельсов. Первый аргумент - это имя объекта (в большинстве случаев - имя вашего класса case/model), второе - для переменной экземпляра, в которой будут храниться данные формы (имя переменной, которое вы использовали в действии «изменить», в URL-адресе вы можете использовать URL-адрес хелперы, или вы можете вручную указать контроллер и действие, и ваш «положить» глагол будет идти в опции HTML хэша

Следуйте за этим и посмотреть, если он работает

2

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

действие обновление «стандартные» успокоительные контроллеры выглядит как этот

def update 
    @device = Device.find(params[:id]) 
    if @device.update_attributes(params[:device]) 
     flash[:notice] = "Successfully updated device." 
     redirect_to @device 
    else 
     render :action => 'edit' 
    end 
    end 

Таким образом, вы должны либо добавить воздавать ваш метод save_settings или перенаправить обратно к себе.

+0

У меня был рендер, я просто взял его для публикации (отредактировал выше) - я все еще просто получаю обратную ссылку на страницу и ничего больше? – naspinski

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