首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有Ruby库/gem可以根据一组参数生成URL?

有没有Ruby库/gem可以根据一组参数生成URL?
EN

Stack Overflow用户
提问于 2011-05-27 20:27:39
回答 4查看 17.1K关注 0票数 29

Rails的URL生成机制(大多数在某个时刻通过polymorphic_url路由)允许传递散列,该散列被序列化为查询字符串,至少对于GET请求是这样。在任何基本路径之上,获得这种功能的最好方法是什么?

例如,我希望拥有如下内容:

代码语言:javascript
复制
generate_url('http://www.google.com/', :q => 'hello world')
  # => 'http://www.google.com/?q=hello+world'

我当然可以编写严格符合我的应用程序要求的自己的库,但如果有一些规范化的库来处理它,我更愿意使用:)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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。即

代码语言:javascript
复制
uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query)
票数 45
EN

Stack Overflow用户

发布于 2016-05-06 09:35:29

晚了一步,但让我强烈推荐Addressable的宝石。除了它的其他有用的功能之外,它还支持通过RFC 6570 URI templates编写和解析uri。要改编给定的示例,请尝试:

代码语言:javascript
复制
gsearch = Addressable::Template.new('http://google.com/{?query*}')
gsearch.expand(query: {:q => 'hello world'}).to_s
# => "http://www.google.com/?q=hello%20world"

代码语言:javascript
复制
gsearch = Addressable::Template.new('http://www.google.com/{?q}')
gsearch.expand(:q => 'hello world').to_s
# => "http://www.google.com/?q=hello%20world"
票数 7
EN

Stack Overflow用户

发布于 2020-12-22 06:26:10

对于香草红宝石,使用URI.encode_www_form

代码语言:javascript
复制
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"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6152231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档