web-dev-qa-db-fra.com

Comment obtenir une chaîne de requête à partir d'une URL dans Rails

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?

54
Prasaanth Naidu

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:

81
mu is too short

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:

28
Russell
vars = request.query_parameters
vars['id']
vars['empid']

etc..

26
valk
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

15
SoAwesomeMan

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.

0
Mikhail Nikalyukin