Comment faire pour extraire des paramètres d'URL à partir d'une URL avec Ruby ou Rails?
J'ai des Url, comme
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
et j'aimerais extraire les paramètres de ces Url et les mettre dans une table de Hachage. Évidemment, je pourrais utiliser des expressions régulières, mais je me demandais juste si il y avait des façons plus faciles de le faire avec Ruby ou Rails. Je n'ai rien trouvé dans le module Ruby URI
mais j'ai peut-être raté quelque chose.
En fait, j'ai besoin d'une méthode qui permettrait de le faire:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Auriez-vous quelques conseils?
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
Ce serait trop de travail, mais c'est probablement la pire option pour ce cas. Mais encore, vous trouverez peut-être ce fragment intéressant. (Poster en commentaire car je ne considère pas cette réponse :-))
Vous devez vous connecter pour publier un commentaire.
Je pense que vous voulez transformer une URL de chaîne dans une table de HACHAGE?
Vous pouvez essayer http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
retourne
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
Je me suis retrouvé à avoir besoin de la même chose pour un projet récent.
La construction sur les Levi's, voici un nettoyant et une méthode plus rapide:
param1=value1¶m1=value2
. La deuxième valeur l'emporte sur la première.Rack::Utils.build_nested_query(params)
(ouRack::Utils.build_query(params)
si analysées avecRack::Utils.parse_query
).CGI:parse
méthode pour être plus stable (voir réponse ci-dessus)Seulement une Amélioration de Lévi réponse ci-dessus -
Pour une chaîne comme les url ci-dessus, il sera de retour
Rack::Utils.build_query(params)
.Pour un pur Ruby solution combiner
URI.parse
avecCGI.parse
(ceci peut être utilisé même si les Rails/Rack etc. ne sont pas nécessaires):- T-il plusieurs façons, pour résoudre votre problème. D'autres vous a montré quelques trucs. Je connais un autre truc. Voici mon essai :-
Lire la méthode docomentation de
::decode_www_form
.Découvrez la adressable gem - populaire remplacement de Ruby URI module de requête d'analyse facile:
(Elle aussi apparemment poignées de param encodage/décodage, à la différence d'URI)
Dans votre Contrôleur, vous devriez être en mesure d'accéder à un dictionnaire (hash) appelé
params
. Donc, si vous savez ce que le nom de chaque paramètre de requête, puis il suffit de faireparams[:param1]
pour y accéder... Si vous ne savez pas ce que les noms des paramètres, vous pouvez parcourir le dictionnaire et la remise des clés.Quelques exemples simples ici.