我正在尝试遵循规则并保持RESTful,但我遇到了一些问题。
我设置了路线,所以我确信它正在调用正确的操作,当我运行 rake routes 时会出现这种情况:
PUT /admin/settings {:controller=>"admin", :action=>"save_settings"}
所以我知道我的路线是正确的,在我的* views / 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" />
但是当我实际点击提交按钮时,没有任何反应。为了进行测试,我只需执行 flash :
# PUT admin/settings
def save_settings
flash[:notice] = 'Settings Saved'
render :action => 'settings'
end
没有任何东西闪烁。我想我在这里覆盖了我的基地,但我必须忘记一些事情。请帮助一个RoR菜鸟:)
答案 0 :(得分:2)
您需要在设置闪光灯后再次渲染设置页面,否则页面将不会重新绘制,因为您没有向浏览器提供任何新内容。
“标准”的restful controllers update动作看起来像这样
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方法添加渲染或重定向回自身。
答案 1 :(得分:1)
你要么做Steve所说的,要么你坚持在表单构建器中提及请求类型,那么你应该使用正确的语法。
试试这个
`<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>`
这取自rails的文档。第一个参数是对象的名称(在大多数情况下是大小写/模型类名称中的设置),第二个是用于存储表单数据的实例变量(在“编辑”操作中使用的变量名称,在url中你可以使用url helper,也可以手动指定控制器和动作,你的“put”动词会进入html选项hash。
按照此操作查看它是否正常工作。