【问题标题】:Link back to page visited before form链接回表单之前访问的页面
【发布时间】:2013-04-19 06:06:45
【问题描述】:

我有一个列表页面,然后是一个表格,然后是一个感谢页面。我需要在感谢页面上放置一个链接,将用户带回他们在表单之前所在的页面,该页面总是变化的。我试过用这个:

= link_to "Back", :back

但这只会让他们回到上一页,所以表单。

【问题讨论】:

标签: ruby-on-rails url redirect request refer


【解决方案1】:

既然你说,它可能是表单之前的不同页面,也许 request_url 可以帮助你。你可以将你的 request_url 保存在一个参数中,如果有的话,可以重定向到 param_url。

这里有一个来源,您可以参考。 http://programming-tut.blogspot.com/2010/06/ruby-on-rails-request-url.html

【讨论】:

    【解决方案2】:

    好吧,您可以在表单页面中设置一个方法来收集该 url。基本思想是使用自定义会话变量来存储以前的 url 并将其保留到下一个会话。

    假设你的表单动作是 SomeController#new,那么

    class SomeController < ApplicationController
      after_action "save_my_previous_url", only: [:new]
    
      def save_my_previous_url
        # session[:previous_url] is a Rails built-in variable to save last url.
        session[:my_previous_url] = URI(request.referer || '').path
      end
    
    end
    

    然后在感谢页面,你可以得到这个my_previous_urlby

     session[:my_previous_url]
    

    这应该可以适合你的情况,两页前的上一个网址。

    免责声明:这未经验证。仅供参考。

    添加

    会话属于控制器。它不是您可以直接在视图中使用的助手。您需要在控制器中定义一个实例变量,然后才能在视图中使用它。像这样

    # Controller
    @back_url = session[:my_previous_url]
     
    # View
    <%= link_to "Back", @back_url %>
    

    【讨论】:

    • 有一个不返回任何错误的表单一定很棒!?如果像我一样,您的表单确实如此,那么后退按钮会将您带回到........表单。
    • 感谢@billy-chan,您的解决方案对我有帮助。只有一个更改而不是 after_filter,可能会更好地使用 before_filter,因此在您当前的操作中,您拥有上一个路径的正确值
    • 嘿@Darkaico,感谢您的反馈!这个答案是两年前的。从我今天的角度来看,它更像是一个 hack :) 今天我认为最好不要在代码库中添加类似的东西。相反,如果该返回 url 被使用一次,最好直接在感谢页面中对其进行硬编码。
    • 我通过session[:previous_url] = request.fullpath得到了这个
    【解决方案3】:

    试试这个

    <%= link_to 'Back', url_for(:back) %>
    # if request.env["HTTP_REFERER"] is set to "http://www.example.com"
    # => http://www.example.com
    

    here is more details.

    【讨论】:

    【解决方案4】:

    如果在Controller中使用,可以直接这样使用:

    def some_action
      # some code
      redirect_to :back
    end
    

    【讨论】:

    • 这会将用户引导回他们刚刚提交的表单。 OP想知道如何跳回两个页面,基本上是在新/编辑表单之前的页面。
    【解决方案5】:

    您可以使用 Rails API 中的示例:

    <%= link_to "Back", :back %>
    

    Rails API Doc for link_to

    使用 :back 符号而不是选项散列将生成指向引荐来源网址的链接(如果不存在引荐来源网址,将使用 JavaScript 反向链接代替引荐来源网址)。

    【讨论】:

      【解决方案6】:

      这对我有用:

      在上一个视图的控制器中:

      cookies[:original_referrer] = request.orignal_url
      

      使用原始页面的 URL 在浏览器上设置 cookie

      在当前视图的控制器中:

      redirect_to cookies[:original_referrer]
      

      【讨论】:

        猜你喜欢
        • 2015-10-25
        • 1970-01-01
        • 2016-06-05
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多