2008-10-01 61 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