konvertieren ruby hash, URL-query-string ... ohne die eckigen Klammern
In Python, ich kann dies tun:
>>> import urlparse, urllib
>>> q = urlparse.parse_qsl("a=b&a=c&d=e")
>>> urllib.urlencode(q)
'a=b&a=c&d=e'
In Ruby[+Schienen] ich kann nicht herausfinden, wie zu tun die gleiche Sache, ohne "Rollen, meine eigene," das scheint seltsam. Die Schienen Weg doesnt Arbeit für mich-es fügt eckige Klammern um den Namen der Abfrage-Parameter, die der server am anderen Ende kann oder kann nicht unterstützen:
>> q = CGI.parse("a=b&a=c&d=e")
=> {"a"=>["b", "c"], "d"=>["e"]}
>> q.to_params
=> "a[]=b&a[]=c&d[]=e"
Mein Anwendungsfall ist einfach, dass ich möchte, um den dreck mit den Werten der einige der Werte, die in der query-string
Teil der URL. Es schien, Natürliche und lehnen Sie sich an die standard-Bibliothek und/oder Schienen, und schreiben Sie etwas wie dieses:
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)
aber nur, wenn die resultierende URI ist in der Tat http://example.com/foo?a=b&a=c&a=d
, und nicht http://example.com/foo?a[]=b&a[]=c&a[]=d
. Gibt es einen richtigen oder besseren Weg, dies zu tun?
InformationsquelleAutor Charlie | 2011-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der modernen ruby das ist einfach:
InformationsquelleAutor Aaron Jensen
Hier ist eine schnelle Funktion, um Ihren hash in query-Parameter:
Dies gilt nicht ordnungsgemäß Flucht Schlüssel oder Werte.
Verwenden Sie nicht dieses. Es schlägt fehl, wenn ein Schlüssel oder Wert enthält
=
oder&
InformationsquelleAutor Miles Zimmerman
Quick Hash einer URL-Abfrage Trick :
Wollen, tun Sie es in umgekehrter Richtung? Verwenden CGI.analysieren:
InformationsquelleAutor FaaduBaalak
Den Weg Schienen Griffe-query-strings der Typ heißt, Sie haben Rollen Sie Ihre eigene Lösung, wie Sie Sie haben. Es ist etwas unglücklich, wenn man sich mit nicht-rails-apps, macht aber Sinn, wenn Sie die Weitergabe von Informationen zu und von rails apps.
InformationsquelleAutor Joel Meador
Als eine einfache plain-Ruby-Lösung (oder RubyMotion, in meinem Fall), dann nutzen Sie einfach dieses:
Es behandelt nur einfache hashes, obwohl.
InformationsquelleAutor Jamon Holmgren