convertir ruby hash de l'URL de requête ... sans les crochets

En Python, je peux le faire:

>>> import urlparse, urllib
>>> q = urlparse.parse_qsl("a=b&a=c&d=e")
>>> urllib.urlencode(q)
'a=b&a=c&d=e'

En Ruby[+Rails] je ne peux pas comprendre comment faire la même chose sans "rolling mon propre", ce qui me semble bizarre. Les Rails de chemin ne fonctionne pas pour moi -- il ajoute entre crochets pour les noms des paramètres de la requête, que le serveur à l'autre extrémité peut ou ne peut pas soutenir:

>> q = CGI.parse("a=b&a=c&d=e")
=> {"a"=>["b", "c"], "d"=>["e"]}
>> q.to_params
=> "a[]=b&a[]=c&d[]=e"

Mon cas est tout simplement que je souhaite la boue avec les valeurs de certaines valeurs dans le query-string partie de l'URL. Il semble naturel de se pencher sur la bibliothèque standard et/ou les Rails, et d'écrire quelque chose comme ceci:

uri = URI.parse("http://example.com/foo?a=b&a=c&d=e")
q = CGI.parse(uri.query)
q.delete("d")
q["a"] << "d"
uri.query = q.to_params # should be to_param or to_query instead?
puts Net::HTTP.get_response(uri)

mais seulement si l'URI est en fait http://example.com/foo?a=b&a=c&a=d, et pas http://example.com/foo?a[]=b&a[]=c&a[]=d. Est-il une bonne ou une meilleure façon de le faire?

  • Je ne vois bit.ly/gc2Ylj, qui m'a incité à écrire rapidement gist.github.com/774142, qui, je pense, accomplit ce que je veux. Mais ce que je voulais, c'était de ne pas rouler mon propre. 🙂
InformationsquelleAutor Charlie | 2011-01-11