为什么我的Controller / Action没有响应:put?

时间:2010-08-22 06:08:58

标签: ruby-on-rails forms

我正在尝试遵循规则并保持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菜鸟:)

2 个答案:

答案 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。

按照此操作查看它是否正常工作。

相关问题