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. 🙂
Vous devez vous connecter pour publier un commentaire.
Moderne ruby c'est tout simplement:
Voici une petite fonction pour activer votre code de hachage dans les paramètres de la requête:
=
ou&
Rapide de Hachage à une URL de Requête Truc :
Voulez le faire dans le sens inverse? Utiliser des CGI.analyser:
Le chemin des rails de poignées de chaînes de requête de ce type signifie que vous avez passer votre propre solution, comme vous l'avez. C'est un peu malheureux si vous avez affaire à des non-rails apps, mais de sens que si vous êtes à la transmission d'informations vers et à partir de rails apps.
Comme un simple Ruby solution (ou RubyMotion, dans mon cas), il suffit d'utiliser cette:
Il ne s'occupe que de simples tables de hachage, si.