1. ホーム
  2. ルビー

[解決済み】Ruby:ハッシュをHTTPパラメータに変換する方法は?

2022-04-07 19:51:55

質問

のようなプレーンなハッシュを使えば、とても簡単です。

{: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"}]

その節は大変お世話になり、ありがとうございました

解決方法は?

更新してください。 この機能は gem から削除されました。

Julienさん、あなたの自己回答は良いもので、私も恥ずかしながら拝借しました。しかし、予約文字を適切にエスケープしておらず、他にもいくつかのエッジケースで破綻しています。

require "addressable/uri"
uri = Addressable::URI.new
uri.query_values = {:a => "a", :b => ["c", "d", "e"]}
uri.query
# => "a=a&b[0]=c&b[1]=d&b[2]=e"
uri.query_values = {:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]}
uri.query
# => "a=a&b[0][c]=c&b[0][d]=d&b[1][e]=e&b[1][f]=f"
uri.query_values = {:a => "a", :b => {:c => "c", :d => "d"}}
uri.query
# => "a=a&b[c]=c&b[d]=d"
uri.query_values = {:a => "a", :b => {:c => "c", :d => true}}
uri.query
# => "a=a&b[c]=c&b[d]"
uri.query_values = {:a => "a", :b => {:c => "c", :d => true}, :e => []}
uri.query
# => "a=a&b[c]=c&b[d]"

gemは' アドレス指定可能 '

gem install addressable