ruby on rails - Como extrair parâmetros de URL de uma URL com Ruby ou Rails?



ruby-on-rails uri (5)

Apenas melhorou com a resposta Levi acima -

Rack::Utils.parse_query URI("http://example.com?par=hello&par2=bye").query

Para uma string como acima, ela retornará

{ "par" => "hello", "par2" => "bye" } 

https://src-bin.com

Eu tenho alguns URLs, como

http://www.example.com/something?param1=value1&param2=value2&param3=value3

e gostaria de extrair os parâmetros desses URLs e obtê-los em um hash. Obviamente, eu poderia usar expressões regulares, mas estava me perguntando se havia maneiras mais fáceis de fazer isso com Ruby ou Rails. Eu não encontrei nada no URI módulo Ruby, mas talvez eu tenha perdido alguma coisa.

Na verdade, preciso de um método que faça isso:

extract_parameters_from_url("http://www.example.com/something?param1=value1&param2=value2&param3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}

Você teria alguns conselhos?


Answer #1

Confira a gem addressable - um substituto popular para o módulo URI do Ruby que facilita a análise de consulta:

require "addressable/uri"
uri = Addressable::URI.parse("http://www.example.com/something?param1=value1&param2=value2&param3=value3")
uri.query_values['param1']
=> 'value1'

(Ele também lida com codificação / decodificação de parâmetros, diferente do URI)



Answer #3

Eu me encontrei precisando da mesma coisa para um projeto recente. Com base na solução da Levi, aqui está um método mais limpo e mais rápido:

Rack::Utils.parse_nested_query 'param1=value1&param2=value2&param3=value3'
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}

Answer #4

Para uma solução Ruby pura, combine URI.parse com CGI.parse (isso pode ser usado mesmo se Rails / Rack etc. não forem necessários):

CGI.parse(URI.parse(url).query) 
# =>  {"name1" => ["value1"], "name2" => ["value1", "value2", ...] }




url-parameters