我有一个新的用户注册表单,如果验证失败,我想在表单中保留这些值。我没有办法做到这一点。
现在我的控制器中有
def create
.....code......
@user = User.new params[:user]
redirect_to new_user_registration_url(@user)
end
但是,这不起作用。验证后需要做些什么才能完成持久值?
答案 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
)。