我有一个新的用户注册表单,如果验证失败,我想保留表单中的值。我没有看到这样做的方法。
现在在我的控制器中我有
def create
.....code......
@user = User.new params[:user]
redirect_to new_user_registration_url(@user)
end
但是,这是行不通的。验证后需要做什么来实现持久值?
我有一个新的用户注册表单,如果验证失败,我想保留表单中的值。我没有看到这样做的方法。
现在在我的控制器中我有
def create
.....code......
@user = User.new params[:user]
redirect_to new_user_registration_url(@user)
end
但是,这是行不通的。验证后需要做什么来实现持久值?
您不想在验证失败时重定向。您应该渲染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
)。