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

Is there a way to check if part of the URL contains a certain string

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

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

如果您所在的位置可以访问 ActionDispatch::Request,您可以执行以下操作:

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

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

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

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

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

可以使用include?方法

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

请记住 include? 区分大小写。因此,如果上面示例中的 my_string 类似于 "abcDefg"(带有大写 D),则 include?("cde") 将 return false。您可能想在调用 include?()

之前执行 downcase()

其他答案绝对是检查您的 URL 的最简洁方法。我想分享一种使用正则表达式执行此操作的方法,这样您就可以 在 URL.[= 中的特定位置检查 URL 中的字符串。 12=]

当您将区域设置作为 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/profile