【问题标题】:Ruby on Rails - back button that will take you back to the previous pageRuby on Rails - 后退按钮,可带您返回上一页
【发布时间】:2023-01-15 05:18:16
【问题描述】:

有没有办法在我的任何页面上添加后退按钮,无论该页面是什么,它都会带您返回到您所在的上一页?

因此,如果我的董事页面上有一个人从我们的合同页面登陆到那里,它将把他们带回合同,如果一个用户从我们的团队页面登陆那里,它将把他们带回团队……

非常感谢

**编辑澄清... 如果我的用户登陆合同页面并且他们提交了一个表单并在页面上编辑了一些东西我希望他们能够返回到上一页但不能返回到表单提交或编辑页面

【问题讨论】:

    标签: ruby ruby-on-rails-4


    【解决方案1】:

    通常你可以使用 link_to 和符号 :back 而不是像这样的 URL

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

    返回上一页。

    但不幸的是,这在您想要跳过某些页面(例如带有表单的页面)的情况下不起作用,因为 :back 只会使您返回到历史记录中的上一个 URL。

    如果您只想返回到某些页面而不是其他页面,那么您必须自己构建该功能。我会首先将那些页面推送到您认为值得列入该列表的会话中。例如,像这样:

    # in the `application_controller.rb`
    private
    
    def remember_page
      session[:previous_pages] ||= []
      session[:previous_pages] << url_for(params.to_unsafe_h) if request.get?
      session[:previous_pages] = session[:previous_pages].unique.first(2)
    end
    
    # in each controller that is worthy
    before_action :remember_page, only: [:index, :show]
    

    现在,如果已经有上一页,您将在会话中找到上一页和当前页面。您可以使用这样的帮助程序返回到上一页:

    # in a helper
    def link_to_previous_page(link_title)
      link_to_if(
        session[:previous_pages].present? && session[:previous_pages].size > 1,
        link_title, 
        session[:previous_pages].first
      )
    end
    

    可以在这样的视图中使用

    <%= link_to_previous_page("return to previous page") %>
    

    【讨论】:

    • 谢谢!我有其他人推荐这个 gem:github.com/Greyoxide/backpedal 但我想我会尝试使用它。
    • 值得的控制器页面是什么意思?我希望我的用户返回的任何页面?所以显然没有表格......是“before_action :remember_page, only: [:index, :show]”rails 如何跟踪以前的 URL?
    • Rails 不知道上一页是什么样子的。上面有没有表格。因此,您需要告诉 Rails 哪些页面需要记住,哪些不需要。您可以通过在要记住的所有操作之前致电remember_page 来做到这一点。或者您可以记住所有页面,只跳过那些您不想记住的页面的 before_action。但是 Rails 不能为您做决定。
    • 你能帮我解释一下session[:previous_pages] &lt;&lt; url_for(params) if request.get?吗?我不断收到 unable to convert unpermitted parameters to hash 错误,我正在尝试自己解决问题。我只是经常在 rails 中找不到 url_for 所以很难
    • url_for 允许从哈希创建 URL。控制器中的参数代表当前请求。这意味着当请求是 get 请求时(我们不想返回 post、put 或 delete 请求)然后将当前 URL 添加到要记住的 URL 列表中。关于错误:我更新了我的答案以解决该问题。
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    相关资源
    最近更新 更多