2008-10-01 60 views
2

我有一個基本的模型,其中我指定了一些字段來驗證其存在。在控制器中的create動作我做標準:RoR:創建/更新:顯示驗證錯誤,同時保留以前的值

@obj = SomeObject.new(params[:some_obj]) 

if @obj.save 
    flash[:notice] = "ok" 
    redirect... 
else 
    flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" } 
    redirect to new form 
end 

然而,當我重定向到新的形式,錯誤顯示,但該字段爲空。有沒有一種方法可以用輸入的值重新填充字段,這樣可以很容易地修正錯誤?

回答

5

render :action => :new而不是重定向。

+0

這背後的原因是爲了讓你保持對象在內存中,而不是創建一個新對象;重定向開始一個全新的請求。 – 2008-10-01 19:15:58

1

在flash哈希中捕獲@obj,然後在new操作中檢查它。

@obj = SomeObject.new(params[:some_obj]) 

if @obj.save 
    flash[:notice] = "ok" 
    # success 
else 
    flash[:error] = @obj.errors.full_messages.collect { |msg| msg + "<br/>" } 
    flash[:obj] = @obj 
    # redirect to new form 
end 

new

@obj = flash[:obj] || MyClass.new