我有这个网址:
http://localhost:3000/blog/posts?locale=en
我有一个帮助,可以删除网址?locale=en
:
def url_without_locale_params(url)
uri = URI url
params = Rack::Utils.parse_query uri.query
params.delete 'locale'
uri.query = params.to_param
uri.to_s
end
有了这个助手,我得到了这个网址http://localhost:3000/blog/posts?
。我想删除尾随的?
。
结果应为http://localhost:3000/blog/posts
。
答案 0 :(得分:9)
使用#gsub:
uri = "http://localhost:3000/blog/posts?locale=en"
uri.gsub(/\?.*/, '')
#=> "http://localhost:3000/blog/posts"
答案 1 :(得分:9)
String#chomp
是可能的。
1.9.3p392 :002 > "foobar?".chomp("?")
=> "foobar"
最终方法将是
def url_without_locale_params(url)
uri = URI url
params = Rack::Utils.parse_query uri.query
params.delete 'locale'
uri.query = params.to_param
uri.to_s.chomp("?")
end
答案 2 :(得分:5)
到目前为止,答案都是关于字符串本身的。你实际在做的是告诉它它有params ""
。如果你nil
params.to_param == ""
,那么你将不会遇到这个问题。
def url_without_locale_params(url)
uri = URI url
params = Rack::Utils.parse_query uri.query
params.delete 'locale'
uri.query = params.to_param.blank? ? nil : params.to_param
uri.to_s
end
这样的事情应该可以解决问题。这样做的原因是,即使使用空字符串,URI也会假设有一些要附加的内容,因此它会将初始?
置于其中。