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

时间:2015-03-24 00:37:15

标签: ruby-on-rails-4 spree

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

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

4 个答案:

答案 0 :(得分:12)

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

这是我用来根据网址呈现不同的布局:

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

您可以使用include?方法

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

请记住,include?具有案例意义。因此,如果上面示例中的my_string类似于“abcDefg”(带有大写D),include?("cde")将返回false。在致电downcase()

之前,您可能需要include?()

答案 3 :(得分:1)

其他答案绝对是最简洁的方式来检查您的网址。我想使用正则表达式分享一种方法,这样您就可以检查您的网址,以查找网址中特定位置的字符串

当您将区域设置作为网址的第一部分(如/ 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 / 用户 / 4,/ en / 个人资料,/ nl / 用户 / 9 / statistics,/ nl / 个人资料等。