Existe-t-il un moyen d'obtenir la chaîne de requête dans une chaîne URL passée dans Rails?
Je souhaite transmettre une chaîne URL:
http://www.foo.com?id=4&empid=6
Comment puis-je obtenir id
et empid
?
Si vous avez une URL dans une chaîne, utilisez l'URI et le CGI pour la séparer:
url = 'http://www.foo.com?id=4&empid=6'
uri = URI.parse(url)
params = CGI.parse(uri.query)
# params is now {"id"=>["4"], "empid"=>["6"]}
id = params['id'].first
# id is now "4"
Veuillez utiliser les bibliothèques standard pour ce genre de choses, n'essayez pas de le faire vous-même avec des expressions régulières.
Voir également le commentaire de Quv sur Rack::Utils.parse_query
au dessous de.
Les références:
Dans un Ruby sur Rails contrôleur, les paramètres URL sont disponibles dans un hachage appelé params
, où les clés sont les noms des paramètres, mais comme Ruby "symboles" (ie. préfixé par deux points). Donc dans votre exemple, params[:id]
serait égal à 4
et params[:empid]
serait égal à 6
.
Je recommanderais de lire un bon tutoriel Rails qui devrait couvrir des bases comme celle-ci. Ici est un exemple - google se présentera beaucoup plus:
vars = request.query_parameters
vars['id']
vars['empid']
etc..
Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
extrait de: Analyser une chaîne comme s'il s'agissait d'une chaîne de requête dans Ruby on Rails
Analyser les chaînes de requête comme Rails les contrôleurs le font. Requêtes imbriquées, généralement via un nom de champ de formulaire comme ce petit type: name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool"
, transformez "en tranches et en dés" en un hachage génial: {"awesome"=>{"beer"=>{"chips"=>nil}}}
http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_queryhttps://github.com/rack/rack/blob/master/lib/ rack/utils.rb # L9
Ce n'est pas la meilleure méthode, mais cela fonctionne:
request.query_string.split(/&/).inject({}) do |hash, setting|
key, val = setting.split(/=/)
hash[key.to_sym] = val
hash
end
Cela renverra du hachage avec tous les paramètres GET
(:name => value
). Ou utilisez simplement request.query_string
, dépend du format dans lequel vous souhaitez obtenir vos paramètres GET
. Vous pouvez également utiliser request.query_params
de rake
gem.