首先是结帐页面,第二个是order_success页面
如果用户使用webbrowser上的返回按钮,则在用户进入order_success页面后,它将返回结帐页面。
所以我想找到一些禁止让我们回去的方法,
在轨道上有什么办法可以实现这个目标吗?
答案 0 :(得分:1)
购买成功后,您应清除购物车,然后将用户重定向到新操作。
在你的order_controller.rb
中 def create
@shopping_cart = nil
redirect_to some_path
end
答案 1 :(得分:1)
“我知道这一点,但如果客户端有一些缓存,用户将使用返回按钮, 用户仍然可以看到一些东西&重新提交,这不是我所期望的“[那是什么意思?]
如果您想阻止用户重新提交相同的请求,您可以添加隐藏字段(只是随机的)并在处理完请求后将其存储在会话中:
if params[:token] == session[:used_token]
render_already_processed_notice
return
end
if @cart.save
session[:used_token] = params[:token]
....
如果您在请求中使用购物车ID,那么您可以使用购物车模型的状态:
@cart = Cart.find(params[:id])
render_some_notice and return if @cart.done?
....
@cart.done = true
@cart.save
我个人不会创建checkout和order_success页面。我只想创建一个单页 - 购物车状态,根据模型状态,我只会显示不同的内容。
如果某些操作只能执行一次(例如关闭购物车或完成交易),则没有问题:render_something and return if @cart.already_closed?
在可以进行多次提交的页面上,但并不总是欢迎(例如将产品添加到购物车 - 用户可以添加两个相同的产品),您可以做两件事:
1)使用上面提到的令牌,它将检测用户何时按下F5,并询问他该动作是否真的应该进行两次,或者
2)只接受请求,但始终为用户提供“回滚”操作的方法(允许他从购物车中删除产品),并确保在最终验收之前验证购物车内容。