2011-07-16 55 views
4

我目前正在通过各种Rails教程工作,但都似乎建议失败的表单提交应该使用呈现器来输出带有错误的表单。例如,创建方法如下:在Ruby on Rails上保留失败表单提交的URL

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而不是?

我想过使用重定向而不是呈现'新',但这会导致显示表单错误的问题。 Rails IRC上的某些人指示我采取客户端验证的方式,但似乎它可以避免这个问题。

+1

我真的不明白为什么这种行为是一个问题。 – Wukerplank

+0

我确定这只是我,但它似乎并不正确。不太可能和假想的情况,但如果有人向我发送一封电子邮件,说“我收到了我不应该在此页上的错误:”,然后复制并粘贴了该URL,那该怎么办? – RobL

回答

2

我的用户注册表单有类似的问题。因为我不使用REST风格的路线在那里,我可以用下面的途径来解决这个问题:

resources :users, :except => [:new, :create] do 
    ... 
end 
get "/signup" => "users#new" 
post "/signup" => "users#create" 

,并在新的形式:

form_for @user, :url => signup_path do ... 
+0

谢谢!想知道这是否是一个路由问题。将有一个去与此,但它看起来应该修复它! – RobL

1

尝试redirect_to :action => 'new'而不仅仅是渲染,这将保留url,但有关错误的信息将会丢失(除非你把它放在flash中)。

另一种选择是将表单提交到用于显示它的URL。在操作开始时,检查是否有一些数据需要处理。如果处理进行得很顺利,你可以在其他地方使用redirect_to,否则你什么也不做 - 表单会显示出来,连同所有的错误。我想,这不是Railsy,但它应该按照你的意愿工作。

+0

谢谢!第二个选项有帮助。我知道这不一定是Rails-y,但它至少应该处理这个问题。 – RobL

1

对不起迟到了(只有6岁)到派对上,但不知何故,这似乎是Turbolinks的问题。

查看这些问题herehere