导轨验证失败和浏览器后退按钮问题

时间:2014-06-30 08:21:30

标签: ruby-on-rails ruby-on-rails-4

我有一个包含多个步骤的表单。在每个步骤之后,相应的表单将保存到db。

表单中的第二步是创建一个新用户。 save_user方法保存此用户。 不幸的是,如果某人在尝试填写用户表单时遇到多个验证错误,并且他们希望返回到步骤1,则他们必须多次单击浏览器的后退按钮(取决于验证失败的次数)这样做可能会覆盖保存的用户,因为他们点击下一个/保存按钮再次前进到下一步。

如何防止这种情况发生并为用户创造更好的体验? 我希望尽可能没有渲染失败的验证表单实例,以便用户可以直接返回上一步。

  def save_user

     ...

    if @user.save
      redirect_to next_step_path
    else
      render 'new'

    end
  end

1 个答案:

答案 0 :(得分:1)

表单提交是HTTP POST,这意味着浏览器会将其视为新的网页浏览。我想不出通过不会导致多个历史记录条目的表单提交来实现此目的的方法。

您最好的选择是使用JavaScript&amp; HTML5在提交前验证您的表单。最简单的,你会检查你的用户名和&amp;您的长度/字符集限制的密码,检查电子邮件地址的有效性,以及其他简单的检查。如果您的大部分用户都使用的是现代浏览器,并且您不介意偶尔进行多后退步骤,那么您<input>元素上的一些额外属性就是您所需要的。

但这些检查无助于您强制执行唯一性。如果你想这样做 - 在用户点击'submit'之前确保用户名是唯一的,比如说 - 那么你需要使用JavaScript。您将创建一个新的控制器操作,该操作将用户名作为参数,并根据名称是否空闲返回true或false。然后,您可以对该操作发出AJAX请求并更新表单以指示该用户名是否有效。