【问题标题】:Failed rails validations and browser back button issueRails 验证失败和浏览器后退按钮问题
【发布时间】:2014-06-30 08:21:29
【问题描述】:

我有一个包含多个步骤的表单。每一步之后,相应的表单都会保存到数据库中。

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

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

  def save_user

     ...

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

    end
  end

【问题讨论】:

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


    【解决方案1】:

    表单提交是一个 HTTP POST,这意味着浏览器会将其视为新的综合浏览量。我想不出一种方法来通过不会导致多个历史条目的表单提交来做到这一点。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 2014-05-10
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多