0

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

现在在我的控制器中我有

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

但是,这是行不通的。验证后需要做什么来实现持久值?

4

1 回答 1

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)。

于 2013-04-06T01:41:17.967 回答