Techioz Blog

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