2010-08-22 112 views
0

我想遵守规则并保持RESTful,但我遇到了一些问题。为什么我的控制器/操作未响应: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

需要添加“:。网址=> {:action =>'save_settings'}'尽管我的路由很好 – naspinski 2010-08-22 15:58:20

回答

1

您要么执行Steve的说法,要么坚持在表单构建器中提到请求类型,那么您应该使用正确的语法。

试试这个

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

这是从Rails的资料为准。第一个参数是对象的名称(在大多数情况下,您的case/model类名称中的设置),第二个参数用于存储表单数据的实例变量(您在“编辑”操作中使用的变量的名称,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 2010-08-22 15:11:56

相关问题