Fil*_*uzi 10 ruby hash uri ruby-on-rails ruby-2.2
如何通过传递哈希来构造带有查询参数的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)
Run Code Online (Sandbox Code Playgroud)
提升了
NoMethodError: undefined method `to_str' for {:a=>"argument1", :b=>"argument2"}:Hash
Run Code Online (Sandbox Code Playgroud)
是否可以使用URI api构建基于哈希的查询字符串?我不想猴子补丁哈希对象...
Fil*_*uzi 13
只需要打'#to_query'哈希.
hash = {
a: 'argument1',
b: 'argument2'
#... dozen more arguments
}
URI::HTTPS.build(host: 'example.com', query: hash.to_query)
Run Code Online (Sandbox Code Playgroud)
=> https://example.com?a=argument1&b=argument2
如果您不使用rails,请记住 require 'uri'
Gri*_*izz 13
对于那些不使用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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6714 次 |
| 最近记录: |