首页 > 解决方案 > Rails - 需要应用程序中每个页面的通用反向链接

问题描述

可能最重要的是我在这里寻找健全性检查。

所以我有一个包含许多不同模型的应用程序,并且许多模型都将模型嵌套到 n 级。我一直在尝试构建一个反向链接帮助程序,它将提供一个链接,让用户备份他们进入此页面所采用的路径。由于用户可以通过多种方式到达页面,因此我无法在每种情况下都对反向链接进行硬编码。

这是我现在所拥有的,但效果不太好。

class ApplicationController < ActionController::Base
  before_action :store_url, if: :current_user

  def skipped_routes
    ["edit", "new", "submit", "aprove", "revert", "add", "add_options", "unschedule", "complete", "assign", "unasign", "select", "resend", "disable", "activate"]
  end

  def store_url
    tree = session[:my_previous_url].split(",")
    if tree.last == request.original_url
       session[:my_previous_url] = tree.pop
    elsif request.referer != tree.last and skipped_routes.exclude? request.referer.split("/").last
      session[:my_previous_url] << ",#{request.referer}"
    end
  end
end

然后在帮助文件中

    module ApplicationHelper
      def back_link(path= nil)
        unless path.blank?
          link_to path, class: "back_link" do
            concat content_tag :i, "", class: "fas fa-chevron-left"
            concat "Back"
          end

        else
          last = session[:my_previous_url].split(",").last
          link_to last, class: "back_link" do
            concat content_tag :i, "", class: "fas fa-chevron-left"
            concat "Back"
          end
        end
      end

我遇到的麻烦是应用程序控制器的 store_url 方法中的逻辑。我希望它在这两种情况之间进行简单的评估。

第一种情况是当前页面与最近存储的路径具有相同的 url。在这种情况下,用户会单击返回链接,现在正在查看最后一个访问页面之前的页面。

如果用户不只是在此页面上,那么我希望该方法将前一页附​​加到已访问页面的数组中。

有没有人遇到过这种问题?我在这里做错了什么?

标签: ruby-on-rails

解决方案


推荐阅读