¿Cómo extraer parámetros de URL desde una URL con Ruby o Rails?
-
21-09-2019 - |
Pregunta
Tengo algunas direcciones URL, como
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
y me gustaría extraer los parámetros de estas URL y conseguir que en un hash. Obviamente, podría usar expresiones regulares, pero me estaba preguntando si había maneras más fáciles de hacer que con Ruby o Rails. No he encontrado nada en el módulo de Rubí URI
pero tal vez me haya perdido algo.
De hecho, necesito un método que haría que:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
¿Quieres que tiene algunos consejos?
Solución
creo que quiere convertir cualquier cadena URL dada en un HASH?
Puede intentar http: // www .ruby-doc.org / stdlib / libdoc / cgi / rdoc / clases / CGI.html # M000075
require 'cgi'
CGI::parse('param1=value1¶m2=value2¶m3=value3')
retornos
{"param1"=>["value1"], "param2"=>["value2"], "param3"=>["value3"]}
Otros consejos
Me encontré que necesitan la misma cosa para un proyecto reciente. Sobre la base de la solución de Levi, aquí es un limpiador y un método más rápido:
Rack::Utils.parse_nested_query 'param1=value1¶m2=value2¶m3=value3'
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Sólo mejorada con Levi respuesta anterior -
Rack::Utils.parse_query URI("http://example.com?par=hello&par2=bye").query
Para una cadena como URL anterior, devolverá
{ "par" => "hello", "par2" => "bye" }
Para una solución de Ruby puro se combinan URI.parse
con CGI.parse
(esto se puede utilizar incluso si Rails / rack etc., no son obligatorios):
CGI.parse(URI.parse(url).query)
# => {"name1" => ["value1"], "name2" => ["value1", "value2", ...] }
Hay más de una manera, para resolver su problema. Otros se han mostrado los trucos. Conozco otro truco. Aquí está mi intento: -
require 'uri'
url = "http://www.example.com/something?param1=value1¶m2=value2¶m3=value3"
uri = URI(url)
# => #<URI::HTTP:0x89e4898 URL:http://www.example.com/something?param1=value1¶m2=value2¶m3=value3>
URI::decode_www_form(uri.query).to_h # if you are in 2.1 or later version of Ruby
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Hash[URI::decode_www_form(uri.query)] # if you are below 2.1 version of Ruby
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
Lea las docomentation método de ::decode_www_form
.
Consulte el direccionable joya - un reemplazo popular para módulo de URI de Ruby que hace la consulta de análisis sencillo:
require "addressable/uri"
uri = Addressable::URI.parse("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
uri.query_values['param1']
=> 'value1'
(También aparentemente maneja PARAM de codificación / decodificación, a diferencia de URI)
En el controlador, que debe ser capaz de acceder a un diccionario (hash) params
llamada. Por lo tanto, si usted sabe lo que los nombres de cada parámetro de consulta es, a continuación, sólo hacer params[:param1]
para acceder a ella ... Si usted no sabe cuáles son los nombres de los parámetros son, usted podría atravesar el diccionario y obtener las claves.
Algunos ejemplos simples aquí .