【问题标题】:Is there a way to check if part of the URL contains a certain string有没有办法检查部分 URL 是否包含某个字符串
【发布时间】:2015-03-24 00:37:14
【问题描述】:

有没有办法检查部分 URL 是否包含某个字符串:

例如。 <% if current_spree_page?("/products/*") %>* 可以是什么?

【问题讨论】:

    标签: ruby-on-rails-4 spree


    【解决方案1】:

    我测试过,gmacdougall 的答案有效,不过我已经找到了解决方案。

    这是我用来根据 url 呈现不同布局的方式:

      url = request.path_info
      if url.include?('products')
        render :layout => 'product_layout'
      else
        render :layout => 'layout'
      end
    

    需要注意的重要一点是,不同的页面会在控制器中调用不同的方法(例如,显示、索引)。我所做的是将这段代码放在它自己的方法中,然后在需要的地方调用该方法。

    【讨论】:

    • 我认为include? 的工作是否正确。如果关键字“产品”在路径中的其他位置怎么办?例如,如果名称为“user_projects”的议程存在,那么它也会匹配此值。
    【解决方案2】:

    如果您在可以访问ActionDispatch::Request 的地方,您可以执行以下操作:

    request.path.start_with?('/products')
    

    【讨论】:

      【解决方案3】:

      你可以使用include?方法

      my_string = "abcdefg" if my_string.include? "cde" puts "String includes 'cde'" end`

      请记住,include? 区分大小写。因此,如果上面示例中的 my_string 类似于“abcDefg”(带有大写 D),include?("cde") 将返回 false。在调用include?() 之前,您可能需要先发送downcase()

      【讨论】:

        【解决方案4】:

        其他答案绝对提供了检查您的 URL 的最干净的方法。我想分享一种使用正则表达式执行此操作的方法,以便您可以在 URL 中的特定位置检查您的 URL 是否有字符串

        当您将语言环境设置为 URL 的第一部分(如 /en/users)时,此方法很有用。

        module MenuHelper
          def is_in_begin_path(*url_parts)
            url_parts.each do |url_part|
              return true if request.path.match(/^\/\w{2}\/#{url_part}/).present?
            end
            false
          end
        end
        

        如果第一部分包含 2 个单词字符,则此帮助方法会挑选出第二个斜线之后的部分,就像您使用语言环境时的情况一样。把它放到你的 ApplicationController 中,让它在任何地方都可用。

        例子:

        is_in_begin_path('users', 'profile')
        

        匹配 /en/users/4、/en/profile、/nl/users/9/statistics、/nl/ 个人资料

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-20
          • 2019-08-05
          • 1970-01-01
          • 1970-01-01
          • 2016-10-13
          • 2012-11-12
          • 1970-01-01
          • 2016-08-09
          相关资源
          最近更新 更多