2011-05-12 80 views
0

好,所以基本上,我有我的模型规范形式:问题与Rails的RESTful的形式3

= 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

这就是我想你问:

我提交有错误的,为什么用URL 读“/运营”,而不是 “/运营/新”表单之后。

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

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

这意味着没有发生重定向,因此URL仍然是“/运营商”。

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

换句话说,按预期工作。