2013-04-06 65 views
0

我有一个新的用户注册表单,如果验证失败,我想将值保存在表单中。我没有看到办法做到这一点。在新用户注册时保留表单值(设计)

现在在我的控制器我有

def create 
    .....code...... 
    @user = User.new params[:user] 
    redirect_to new_user_registration_url(@user) 
end 

但是,这是行不通的。验证后需要做些什么才能完成持久性值?

回答

2

您不想在验证失败时重定向。您应该呈现new操作(或任何适合您情况的操作)。重定向将无法访问调用上下文中的任何实例变量;这本质上是一个全新的要求。典型的设置是这样的:

def SomeController < ApplicationController 

    def new 
    @foo = Foo.new 
    end 

    def create 
    @foo = Foo.new(params[:foo]) 
    if @foo.save 
     redirect_to foo_path(@foo) 
    else 
     render action: 'new' 
    end 
    end 

end 

这里的render action:可以是一个有点混乱。它实际上并没有调用这个动作;相反,它呈现该动作的默认视图。在这种情况下,如果Foo未能保存,它将呈现new表单,但不会填充新的Foo表单,而会填充保存失败的Foo表单。所以你会再次获得表单中的所有值。通常,当您渲染表单(或在您的布局中)时,您还将检查并渲染模型上可能存在的任何错误(@foo)。

+0

谢谢!我最终将代码更改回原始的设计创建方法,并重新开始工作。我将来会记住这一点 – user2012677 2013-04-06 13:14:08