Eu tenho alguns URLs, como
http://www.example.com/something?param1=value1¶m2=value2¶m3=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. Não encontrei nada no módulo Ruby, URI
mas talvez 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¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Você gostaria de receber alguns conselhos?
ruby-on-rails
ruby
uri
url-parameters
Flackou
fonte
fonte
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
Isso também funcionaria, mas é provavelmente a pior opção para este caso. Mas você ainda pode achar interessante esse trecho. (Publicando como comentário, já que eu não considero isso uma resposta :-))Respostas:
Eu acho que você deseja transformar qualquer string de URL em HASH?
Você pode tentar http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
retorna
fonte
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
Eu me vi precisando da mesma coisa para um projeto recente. Com base na solução da Levi, aqui está um método mais limpo e rápido:
fonte
param1=value1¶m1=value2
. O segundo valor supera o primeiro.Rack::Utils.build_nested_query(params)
(ouRack::Utils.build_query(params)
se analisadoRack::Utils.parse_query
).Apenas melhorado com a resposta Levi acima -
Para uma string como a URL acima, ela retornará
fonte
Rack::Utils.build_query(params)
.Para uma solução Ruby pura, combine
URI.parse
comCGI.parse
(isso pode ser usado mesmo que Rails / Rack etc. não sejam necessários):fonte
Existem mais de uma maneira de resolver seu problema. Outros mostrou alguns truques. Eu conheço outro truque. Aqui está a minha tentativa: -
Leia a documentação do método
::decode_www_form
.fonte
Confira a gema endereçável - um substituto popular para o módulo URI do Ruby que facilita a análise de consultas:
(Ele também aparentemente lida com param codificação / decodificação, ao contrário do URI)
fonte
No seu Controller, você poderá acessar um dicionário (hash) chamado
params
. Então, se você sabe quais são os nomes de cada parâmetro de consulta, basta fazerparams[:param1]
acessá-lo ... Se você não souber quais são os nomes dos parâmetros, poderá percorrer o dicionário e obter as chaves.Alguns exemplos simples aqui .
fonte