Tengo algunas 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 ponerlos en un hash. Obviamente, podría usar expresiones regulares, pero me preguntaba si había formas más fáciles de hacerlo con Ruby o Rails. No he encontrado nada en el módulo Ruby, URI
pero tal vez me perdí algo.
De hecho, necesito un método que haga eso:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
¿Te darías algunos consejos?
ruby-on-rails
ruby
uri
url-parameters
Flackou
fuente
fuente
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
Esto también funcionaría, pero probablemente sea la peor opción para este caso. Pero aún así puede encontrar este fragmento interesante. (Publicando como comentario ya que no considero que esto sea una respuesta :-))Respuestas:
¿Creo que quieres convertir cualquier cadena URL en un HASH?
Puede probar http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
devoluciones
fuente
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
Me encontré necesitando lo mismo para un proyecto reciente. Basándose en la solución de Levi, aquí hay un método más limpio y rápido:
fuente
param1=value1¶m1=value2
. El segundo valor triunfa sobre el primero.Rack::Utils.build_nested_query(params)
(oRack::Utils.build_query(params)
si se analizaRack::Utils.parse_query
).Solo mejorado con la respuesta de Levi arriba:
Para una cadena como la URL anterior, devolverá
fuente
Rack::Utils.build_query(params)
.Para una solución Ruby pura, combínela
URI.parse
conCGI.parse
(esto puede usarse incluso si no se requieren Rails / Rack, etc.):fuente
Hay más de una forma de resolver su problema. Otros te han mostrado algunos trucos. Conozco otro truco. Aquí está mi intento: -
Lea el método docomentation de
::decode_www_form
.fuente
Eche un vistazo a la gema direccionable , un reemplazo popular para el módulo URI de Ruby que facilita el análisis de consultas:
(Al parecer, también maneja la codificación / decodificación de parámetros, a diferencia de URI)
fuente
En su controlador, debería poder acceder a un diccionario (hash) llamado
params
. Por lo tanto, si sabe cuáles son los nombres de cada parámetro de consulta, simplementeparams[:param1]
acceda a él ... Si no sabe cuáles son los nombres de los parámetros, puede recorrer el diccionario y obtener las claves.Algunos ejemplos simples aquí .
fuente