hyp*_*jas 7 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
我有这个网址:
http://localhost:3000/blog/posts?locale=en
Run Code Online (Sandbox Code Playgroud)
我有一个帮助删除?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
Run Code Online (Sandbox Code Playgroud)
有了这个助手,我得到了这个网址http://localhost:3000/blog/posts?
.我想删除尾随?
.
结果应该是http://localhost:3000/blog/posts
.
使用#gsub:
uri = "http://localhost:3000/blog/posts?locale=en"
uri.gsub(/\?.*/, '')
#=> "http://localhost:3000/blog/posts"
Run Code Online (Sandbox Code Playgroud)
String#chomp
是一种可能性.
1.9.3p392 :002 > "foobar?".chomp("?")
=> "foobar"
Run Code Online (Sandbox Code Playgroud)
最后的方法是
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
Run Code Online (Sandbox Code Playgroud)
到目前为止,答案都是关于字符串本身的.你实际在做的是告诉它它有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
Run Code Online (Sandbox Code Playgroud)
这样的事情应该可以解决问题.这样做的原因是,即使使用空字符串,URI也会假设有一些要附加的内容,因此它会将首字母?
放在上面.
归档时间: |
|
查看次数: |
3889 次 |
最近记录: |