Ruby: ¿Cómo convertir un hash en parámetros HTTP?

Eso es bastante fácil con un hash simple como

{:a => "a", :b => "b"} 

que se traduciría en

"a=a&b=b"

Pero, ¿qué haces con algo más complejo como

{:a => "a", :b => ["c", "d", "e"]} 

que debería traducirse en

"a=a&b[0]=c&b[1]=d&b[2]=e" 

O peor aún, (qué hacer) con algo como:

{:a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}]

¡Gracias por la apreciada ayuda con eso!