坚持新用户注册的形式价值(设计)

时间:2013-04-06 01:01:11

标签: ruby-on-rails ruby devise

我有一个新的用户注册表单,如果验证失败,我想在表单中保留这些值。我没有办法做到这一点。

现在我的控制器中有

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

但是,这不起作用。验证后需要做些什么才能完成持久值?

1 个答案:

答案 0 :(得分: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)。