Come ottenere una stringa di query da un URL in Rails

C’è un modo per ottenere la stringa di query in una stringa di URL passata in Rails?

Voglio passare una stringa URL:

http://www.foo.com?id=4&empid=6 

Come posso ottenere id e empid ?

Se si dispone di un URL in una stringa, utilizzare URI e CGI per separarlo:

 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" 

Si prega di utilizzare le librerie standard per questa roba, non provare a farlo da soli con le espressioni regolari.

Riferimenti:

  • CGI.parse
  • URI.parse

In un metodo del controller Ruby on Rails i parametri URL sono disponibili in un hash chiamato params , dove le chiavi sono i nomi dei parametri, ma come “simboli” Ruby (cioè preceduti da due punti). Quindi nel tuo esempio, params[:id] sarebbe uguale a 4 e params[:empid] sarebbe uguale a 6 .

Suggerirei di leggere un buon tutorial su Rails che dovrebbe coprire argomenti come questo. Ecco un esempio: Google si presenterà molto di più:

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

eccetera..

 Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"} 

citato da: Analizza una stringa come se fosse una querystring in Ruby on Rails

Analizza le stringhe come fanno i controller di rails. Query annidate, in genere tramite un nome campo modulo come questo ragazzo: name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool" , ottieni ‘sliced-and-dad ‘in un fantastico hash: {"awesome"=>{"beer"=>{"chips"=>nil}}}

http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L90

Questo non è il metodo migliore, ma funziona:

 request.query_string.split(/&/).inject({}) do |hash, setting| key, val = setting.split(/=/) hash[key.to_sym] = val hash end 

Ciò restituirà l’hash con tutti i parametri GET ( :name => value ). O semplicemente usa il metodo request.query_string , dipende dal formato in cui vuoi ottenere i tuoi parametri GET . Inoltre puoi usare request.query_params da rake gem.