Ruby on rails 新用户注册时保留表单值(设计)
我有一个新的用户注册表单,如果验证失败,我希望在表单中保留这些值。我没有找到这样做的方法 现在在我的控制器里我有Ruby on rails 新用户注册时保留表单值(设计),ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我有一个新的用户注册表单,如果验证失败,我希望在表单中保留这些值。我没有找到这样做的方法 现在在我的控制器里我有 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
然而,这是行不通的。验证后需要做什么才能实现持久值?您不希望在验证失败时重定向。您应该呈现
新的
操作(或任何适合您的情况的操作)。重定向将无法从调用上下文访问任何实例变量;这基本上是一个全新的要求。典型的设置如下所示:
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
def SomeController
渲染操作:
这里可能有点混乱。它实际上并不要求采取行动;相反,它呈现该操作的默认视图。在这种情况下,如果Foo
未能保存,它将呈现新的
表单,但不是用新的Foo
填充,而是用未能保存的Foo
填充。因此,您将再次获得表单中的所有值。通常,在渲染表单(或布局)时,还将检查并渲染模型上可能存在的任何错误(@foo
)。谢谢!,最后我把代码改回了Desive最初的创建方法,它又重新开始工作了。我以后会记住这一点