【发布时间】:2015-03-24 00:37:14
【问题描述】:
有没有办法检查部分 URL 是否包含某个字符串:
例如。 <% if current_spree_page?("/products/*") %>,* 可以是什么?
【问题讨论】:
标签: ruby-on-rails-4 spree
有没有办法检查部分 URL 是否包含某个字符串:
例如。 <% if current_spree_page?("/products/*") %>,* 可以是什么?
【问题讨论】:
标签: ruby-on-rails-4 spree
我测试过,gmacdougall 的答案有效,不过我已经找到了解决方案。
这是我用来根据 url 呈现不同布局的方式:
url = request.path_info
if url.include?('products')
render :layout => 'product_layout'
else
render :layout => 'layout'
end
需要注意的重要一点是,不同的页面会在控制器中调用不同的方法(例如,显示、索引)。我所做的是将这段代码放在它自己的方法中,然后在需要的地方调用该方法。
【讨论】:
include? 的工作是否正确。如果关键字“产品”在路径中的其他位置怎么办?例如,如果名称为“user_projects”的议程存在,那么它也会匹配此值。
如果您在可以访问ActionDispatch::Request 的地方,您可以执行以下操作:
request.path.start_with?('/products')
【讨论】:
你可以使用include?方法
my_string = "abcdefg"
if my_string.include? "cde"
puts "String includes 'cde'"
end`
请记住,include? 区分大小写。因此,如果上面示例中的 my_string 类似于“abcDefg”(带有大写 D),include?("cde") 将返回 false。在调用include?() 之前,您可能需要先发送downcase()
【讨论】:
其他答案绝对提供了检查您的 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/ 个人资料等
【讨论】: