Ruby: ハッシュを HTTP パラメータに変換するにはどうすればよいですか?
概要
次のような単純なハッシュを使用すると、それは非常に簡単です
{:a => "a", :b => "b"}
翻訳すると
"a=a&b=b"
しかし、次のようなより複雑なものではどうすればよいでしょうか
{:a => "a", :b => ["c", "d", "e"]}
これは次のように翻訳されるはずです
"a=a&b[0]=c&b[1]=d&b[2]=e"
あるいは、さらに悪いことに、次のようなことになります。
{:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]
大変感謝しております。
解決策
基本的なネストされていないハッシュの場合、Rails/ActiveSupport には Object#to_query があります。
require 'active_support/all'
query = {:a => "a", :b => ["c", "d", "e"]}
query.to_query
# "a=a&b%5B%5D=c&b%5B%5D=d&b%5B%5D=e"
CGI.unescape(query.to_query)
# "a=a&b[]=c&b[]=d&b[]=e"
http://api.rubyonrails.org/classes/Object.html#method-i-to_query