【问题标题】:how to redirect second last page如何重定向倒数第二页
【发布时间】:2017-01-17 14:38:14
【问题描述】:
在我的应用程序中,我需要保存 URL 的状态,我需要在其中存储从第二个到最后一个请求的请求路径。我知道request.reffer 返回最后一页URL,但我需要倒数第二页URL,如果没有routes 修改和任何params,我怎么能做到这一点?有可能实现吗?
场景:
假设我现在有一些身份验证页面要结帐。
- 用户无需身份验证即可访问产品页面。
- 当用户想要购买产品时,他需要登录或注册。
- 通过登录我可以实现重定向回产品路径
- 但在签名页面上提供了注册链接,因此
request.reffer 将在注册后返回登录路径。
我怎样才能重定向到正确的(产品)页面?
欢迎任何好的建议!
【问题讨论】:
标签:
ruby-on-rails
ruby-on-rails-4
redirect
【解决方案1】:
如果我对您的问题的理解正确:您想要一个链接来引导用户,而不是之前查看的页面,而是之前的页面。你可以用一些javascript简单地实现这一点:
<%= link_to "Double Back", "javascript:history.go(-2);" %>
这样做是使用浏览器的历史记录将两个 URL 及时跳转回来。相当于在浏览器上单击两次后退按钮。
我最近解决了一个页面的类似问题,该页面有时会在提交表单后指向自身。发生这种情况时,:back 按钮将变得无用,因为用户上一页是同一页。我使用以下代码解决了这个问题:
<%= link_to "Back", "javascript: if (document.referrer == '#{request.original_url}'){history.go(-2);} else {history.go(-1);}" %>
这表示“如果上一页是同一页,则跳回两页,否则,跳回上一页”
更新:
再次阅读您的问题,听起来您可能正试图在 Rails 中获取上一页以用于重定向?如果是这种情况,上述解决方案将不起作用,但您可以使用 Flash 存储上一页并将其转发到下一页(它将是上一页),然后访问它并将其用于重定向。此处的 Rails 指南中解释了 Flash:http://guides.rubyonrails.org/action_controller_overview.html#the-flash
我想解决方案看起来像:
first controller action
flash[:previous_page] = "#{request.original_url}"
end
second controller action
redirect_to flash[:previous_page]
end
【解决方案2】:
您可以使用 Rails 会话。每当用户访问产品页面时,您应该将产品 ID 保存在会话中。登录后,您可以重定向到存储在会话中的产品页面,该页面始终是最新查看的产品。