如何重定向倒数第二页

时间:2016-09-09 12:30:35

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

在我的应用程序中,我需要保存URL的状态,其中我需要存储倒数第二个请求的请求路径。我知道request.reffer会返回上一页URL,但我需要倒数第二页的网址,如果没有routes修改且没有任何params,我该如何实现这一目标?是否有可能实现这一目标?

情景:

假设我现在有一些验证页面可供退房。

  1. 用户无需身份验证即可访问产品页面。
  2. 当用户想要购买他需要登录或注册的产品时。
  3. 通过登录,我可以实现重定向回产品路径
  4. 但注册页面上提供了注册链接,因此注册后request.reffer将返回登录路径。
  5. 如何重定向到正确的(产品)页面?

    欢迎任何好的建议!

2 个答案:

答案 0 :(得分:4)

如果我正确理解您的问题:您需要一个指向用户的链接,而不是之前查看的页面,而是之前的页面。您只需使用一些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存储上一页并将其转发到下一页(它将是上一页的前一页),然后访问它并将其用于重定向。 Flash在Rails指南中有解释: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

答案 1 :(得分:0)

您可以使用Rails会话。每当用户访问产品页面时,您都应该在会话中保存产品ID。登录后,您可以重定向到会话中存储的产品页面,该产品页面始终是最新查看的产品。