Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 新用户注册时保留表单值(设计)_Ruby On Rails_Ruby_Devise - Fatal编程技术网

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最初的创建方法,它又重新开始工作了。我以后会记住这一点