有没有办法检查网址的一部分是否包含某个字符串:
EG。 <% if current_spree_page?("/products/*") %>
,*
可以是什么?
答案 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 / 个人资料等。