2011-05-12 83 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對象的所有狀態信息,包括您遇到的錯誤以及剛剛提交的表單值。

換句話說,按預期工作。