Ruby on rails 验证失败后,在URL中防止/替换新操作

Ruby on rails 验证失败后,在URL中防止/替换新操作,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,验证失败后,我希望用户的浏览器在URL中显示/new操作,而不是/create操作(在每次验证失败后替换/new)。有没有办法用rails做到这一点 def new @user = User.new end def create @user = User.new(params[:user]) if @user.save redirect_to success_path else render 'new' end end 您可以改为使用会话重

验证失败后,我希望用户的浏览器在URL中显示/new操作,而不是/create操作(在每次验证失败后替换/new)。有没有办法用rails做到这一点

def new
  @user = User.new
end


def create
   @user = User.new(params[:user])

   if @user.save
     redirect_to success_path
   else
     render 'new'
   end
end

您可以改为使用会话重定向:

def new
  if session[:new_user_params].present?
    @user = User.new(session[:new_user_params])
    @user.valid?
  else
    @user = User.new
  end
end

def create
  @user = User.new(params[:user])

  if @user.save
    session.delete(:new_user_params)
    redirect_to success_path
  else
    session[:new_user_params] = params[:user]
    redirect_to action: :new
  end
end

我不认为验证错误是通过这种方法保存的,或者是真的。我已将答案更新为在正确的情况下也调用
valid?
。请问你为什么要这样做?这真的不是一种宁静的方式,也不是Rails使用的方式。@Vapid谢谢。事实上,你是对的,但是,这只是多步骤形式中的许多步骤之一。此外,向用户公开/create操作并不十分专业,因为它暴露了太多应用程序的“管道”。我明白了,任何其他(RESTful)方法都将不胜感激。那么使用会话和新方法可能是最好的选择。对于另外两个多步骤解决方案,您可以查看这些。