Ruby on rails 验证失败后,在URL中防止/替换新操作
验证失败后,我希望用户的浏览器在URL中显示/new操作,而不是/create操作(在每次验证失败后替换/new)。有没有办法用rails做到这一点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 您可以改为使用会话重
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)方法都将不胜感激。那么使用会话和新方法可能是最好的选择。对于另外两个多步骤解决方案,您可以查看这些。