Rails 3中RESTful表单的问题

时间:2011-05-12 06:36:13

标签: ruby-on-rails-3 validation controller

好的,基本上,我的模型有一个正常形式:

= form_for @operator do |f|
blah blah blah

在我的操作员控制器中,我有这个:

def new
  @operator = Operator.new
  @operator.build_user

  respond_to do |format|
    format.html {}
  end
end

def create
  @user = User.create(params[:operator].delete(:user))
  @user.update_attributes(:login => @user.email)
  @operator = Operator.new(params[:operator].merge(:user => @user))

  respond_to do |format|
    if @operator.save
      format.html {redirect_to new_operator_aircraft_path(@operator)}
    else
      format.html { render :action => "new", :error => @operator.errors }
    end
  end
end
非常基本的东西。我的模型中有一些validates_presence_of内容,所以当我提交表单时,它应该会告诉我我有错误(并保留我填写的字段)

到目前为止?是的。问题是,似乎我发布到/运营商,这就是渲染。我似乎忘记了Rails2.3 +中发生了什么,但我不应该再次重定向到/ operators / new?或者是一直以来的预期行为?

1 个答案:

答案 0 :(得分:1)

以下是我的想法:

  

在我提交有错误的表单后,为什么要使用该网址   读“/运算符”而不是   “/运营商/新”。

由于资源丰富的路由,当通过POST向“/ operators”提交表单时,在OperatorsController上调用create动作。如果在保存操作员时遇到错误,您已指示控制器在同一请求中呈现新操作。

render :action => "new", :error => @operator.errors

这意味着未发生重定向,因此URL仍为“/运算符”。

如果发生重定向,您将丢失当前请求中@operator对象的所有状态信息,包括您遇到的错误以及您刚刚提交的表单值。

换句话说,按预期工作。