[英]problem with RESTful forms in Rails 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
東西,所以當我提交表單時,很自然地,它應該告訴我我有錯誤(並保留我填寫的字段)
到目前為止正確嗎? 是的 問題是,似乎我正在發布到/ operators,這就是渲染結果。 我似乎已經忘記了Rails2.3 +中會發生什么,但是我不應該再次重定向到/ operators / new嗎? 還是一直以來的預期行為?
我想這就是您要問的:
在提交帶有錯誤的表單之后,為什么URL讀為“ / operators”而不是“ / operators / new”。
由於資源豐富的路由,當通過POST向“ / operators”提交表單時,將在OperatorsController上調用create動作。 如果在保存運算符時遇到錯誤,則已指示控制器在同一請求中呈現新動作。
render :action => "new", :error => @operator.errors
這意味着沒有發生重定向,因此URL仍為“ / operators”。
如果發生重定向,您將丟失當前請求中@operator對象的所有狀態信息,包括遇到的錯誤以及剛提交的表單值。
換句話說,按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.