CGI.parse

require "cgi"

params = CGI.parse("query_string")
  # {"name1" => ["value1", "value2", ...],
  #  "name2" => ["value1", "value2", ...], ... }

試してみる

CGI.parse("query_string") #=> {"query_string"=>[]}
CGI.parse("") #=> {}
CGI.parse("query_string=1") #=> {"query_string"=>["1"]}
CGI.parse("query_string=1&query_string=2") #=> {"query_string"=>["1", "2"]}
CGI.parse("query_string=1&query_string2=2") #=> {"query_string"=>["1"], "query_string2"=>["2"]}

いけていないところ

value が一つしかないのにArrayで返ってくる。

Rack::Utils.parse_nested_query

URLからクエリ文字列(GETパラメータ)を抽出してハッシュにする - paranitips

Rack::Utils.parse_nested_query("a=1&b=2") #=> {"a"=>"1", "b"=>"2"}
Rack::Utils.parse_nested_query("") #=> {}
Rack::Utils.parse_nested_query("a=1&a=2") #=> {"a"=>"2"}

いけていないところ

いけていないというかちょっとハマりポイントとしては同じキーでvalueをセットしたときに後勝ちになってしまうこと。