我目前正在通过各种Rails教程,但似乎都建议失败的表单提交应该使用渲染来输出带有错误的表单。例如,create方法如下所示:
def create
@user = User.new(params[:user])
if @user.save
flash[:success] = "Welcome to the Sample App"
redirect_to @user
else
@title = "Sign up"
render 'new'
end
end
这具有预期的效果,但意味着如果我在http://localhost:3000/users/new有新的用户表单并且发生错误,我会在http://localhost:3000/users
获得相同的错误表单有没有办法确保我转到http://localhost:3000/users/new?
我考虑使用重定向而不是渲染'new',但这会导致显示表单错误的问题。 Rails上的某人IRC指示我做一个客户端验证的方法,但这似乎就是避免了这个问题。
答案 0 :(得分:2)
我的用户注册表单存在类似问题。由于我没有在那里使用RESTful路由,我能够通过以下路由解决它:
resources :users, :except => [:new, :create] do
...
end
get "/signup" => "users#new"
post "/signup" => "users#create"
以新形式:
form_for @user, :url => signup_path do ...
答案 1 :(得分:1)
尝试redirect_to :action => 'new'
而不是仅渲染,这将保留网址,但有关错误的信息将会丢失(除非您将其放入flash
)。
另一种选择是将表单提交到用于显示它的URL。在操作开始时,您可以检查是否需要处理某些数据。如果处理正常,你在其他地方redirect_to
,否则你什么也不做 - 表格会与所有错误一起显示。我想,这不是很Railsy,但它可以按你的意愿工作。
答案 2 :(得分:1)
很抱歉迟到(仅仅6年)参加聚会,但不知何故这似乎与Turbolinks有关。