如何通过传递哈希来构造带有查询参数的URI对象?
我可以使用:
生成查询 URI::HTTPS.build(host: 'example.com', query: "a=#{hash[:a]}, b=#{[hash:b]}")
生成
https://example.com?a=argument1&b=argument2
但是我认为为许多参数构造查询字符串将是不可读的并且难以维护。我想通过传递hash来构造查询字符串。如下例所示:
hash = {
a: 'argument1',
b: 'argument2'
#... dozen more arguments
}
URI::HTTPS.build(host: 'example.com', query: hash)
提出
NoMethodError: undefined method `to_str' for {:a=>"argument1", :b=>"argument2"}:Hash
是否可以使用URI api构建基于哈希的查询字符串?我不想要修补哈希对象......
答案 0 :(得分:9)
只需在哈希上调用'#to_query'
。
hash = {
a: 'argument1',
b: 'argument2'
#... dozen more arguments
}
URI::HTTPS.build(host: 'example.com', query: hash.to_query)
=> https://example.com?a=argument1&b=argument2
如果您不使用rails,请记得require 'uri'
答案 1 :(得分:9)
对于那些不使用Rails或Active Support的用户,使用Ruby标准库的解决方案是
hash = {
a: 'argument1',
b: 'argument2'
}
URI::HTTPS.build(host: 'example.com', query: URI.encode_www_form(hash))
=> #<URI::HTTPS https://example.com?a=argument1&b=argument2>