Rails的URL生成机制(大多数在某个时刻通过polymorphic_url
路由)允许传递散列,该散列被序列化为查询字符串,至少对于GET请求是这样。在任何基本路径之上,获得这种功能的最好方法是什么?
例如,我希望拥有如下内容:
generate_url('http://www.google.com/', :q => 'hello world')
# => 'http://www.google.com/?q=hello+world'
我当然可以编写严格符合我的应用程序要求的自己的库,但如果有一些规范化的库来处理它,我更愿意使用:)。
发布于 2011-05-27 20:51:47
是的,在Ruby的标准库中,你会发现一个完整的类模块,用于处理URI,其中有一个用于HTTP。您可以使用一些参数调用#build
,就像您所展示的那样。
http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009497
对于查询字符串本身,只需使用Rails的散列加法#to_query
。即
uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query)
发布于 2016-05-06 09:35:29
晚了一步,但让我强烈推荐Addressable的宝石。除了它的其他有用的功能之外,它还支持通过RFC 6570 URI templates编写和解析uri。要改编给定的示例,请尝试:
gsearch = Addressable::Template.new('http://google.com/{?query*}')
gsearch.expand(query: {:q => 'hello world'}).to_s
# => "http://www.google.com/?q=hello%20world"
或
gsearch = Addressable::Template.new('http://www.google.com/{?q}')
gsearch.expand(:q => 'hello world').to_s
# => "http://www.google.com/?q=hello%20world"
发布于 2020-12-22 06:26:10
对于香草红宝石,使用URI.encode_www_form
require 'uri'
query = URI.encode_www_form({ :q => "test" })
url = URI::HTTP.build(:host => "www.google.com", query: query).to_s
#=> "http://www.google.com?q=test"
https://stackoverflow.com/questions/6152231
复制相似问题