gpt4 book ai didi

javascript - 如何防止用户在 Rails 浏览器中点击 'back' 后重复提交表单

转载 作者:行者123 更新时间:2023-12-01 02:20:20 25 4
gpt4 key购买 nike

我不想阻止用户使用“后退”按钮,但如果他们这样做,我想将他们重定向到根网址,这样我就不会收到重复的条目。

到目前为止我所尝试的方法均无效。我在 before_action 中尝试过:

response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "0"

我尝试在我的 View 中放置一个隐藏的随机字符串:

<%= hidden_field_tag :token, "#{SecureRandom.hex}" %>

...使用此 Controller 操作:

def create
token = params[:token]
session[:tokens] ||= []
if session[:tokens].include? token
redirect_to root_path, notice: "That page is no longer viewable."
else
if @trade_wizard.trade.save
session[:tokens] << token
redirect_to root_path, notice: "Success."
else
redirect_to({ action: Wizard::Trade::STEPS.first }, alert: 'There was a problem.')
end
end
end

上述代码中的token被添加到session[:tokens],但当我回击时,重定向不会发生。为什么?此外,这是一个坏主意吗?我预计 session 数组很快就会填满。

最佳答案

在 Rails 代码中处理此问题可能不起作用,因为页面只能在用户返回时从浏览器缓存加载。 (可能全部取决于用户浏览器设置,这些设置可能会覆盖标题。)

而不是通过尝试阻止重新提交操作来尝试停止创建重复记录。您能否向模型添加一些唯一性验证,以检查此时记录是否已保存,如果保存,则返回验证错误?

您甚至可以检查 Controller 中的验证错误对象,如果存在用于唯一性验证的对象,则执行重定向而不是重新呈现表单的标准。

关于javascript - 如何防止用户在 Rails 浏览器中点击 'back' 后重复提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com