如何在 Rails 中使用相同的键接受多个 URL 参数?

Ste*_*sky 5 ruby ruby-on-rails url-parameters

在 Rails 中,当您想要通过单个数组参数发送值列表时,通常通过在 URL 参数键后添加[]. 例如,查询字符串?foo[]=1&foo[]=2&foo[]=3被解析为

params = { "foo" => [ 1, 2, 3 ] }
Run Code Online (Sandbox Code Playgroud)

但对于?foo=1&foo=2&foo=3,只有最后一个参数出现在 params 哈希中:

params = { "foo" => 3 }
Run Code Online (Sandbox Code Playgroud)

当你可以控制 URL 格式时一切都很好;你可以只使用[]语法。但是,如果 URL 是由您无法影响的远程系统构建的,并且坚持采用第二种格式,该怎么办?如何才能正确地解开这些论点呢?

Ste*_*sky 2

使用 @maxcal 的提示,我想出了这个解决方案(以避免向我正在开发的这个完全臃肿的应用程序添加更多宝石):

current_query_string = URI(request.url).query
foo_values = URI::decode_www_form(current_query_string).
  select { |pair| pair[0] == "foo" }.
  collect { |pair| pair[1] }
Run Code Online (Sandbox Code Playgroud)