Ruby URI:使用 "param[]=value" 为数组参数构建 URI

Ruby URI: build URI with "param[]=value" for array params

我正在尝试查询 API(lichess API)。而且我无法正确考虑参数,因为 URI 格式化 URL 不是数组参数的预期格式。

预期的格式是:curl https://explorer.lichess.ovh/lichess?ratings[]=2200&ratings[]=2500。所以 ratings 参数是一个值数组,url 应该使用 ratings[]=value.

我目前正在这样生成我的 URI,as per the doc:

base = "https://explorer.lichess.ovh/master"
params = {
  ratings: [1600, 1800]
}

uri = URI(base)
uri.query = URI.encode_www_form(params)

但这会生成这样的 URL:https://explorer.lichess.ovh/master?ratings=1600&ratings=1800... 这不是预期的格式,Lichess 无法理解 API。

Ruby 是否提供任何内置方式来生成预期格式的参数,或者我是否需要手动构建 URL(感觉就像重新发明轮子)?

Rails/ActiveSupport 有一个 to_query 方法可以做你想做的事。

2.1.5 :010 > params.to_query
 => "ratings%5B%5D=1600&ratings%5B%5D=1800" 

另外,看看 this comment,它解释了为什么 URI.encode_www_form 没有 return 方括号。