Mam kilka adresów URL, na przykład
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
i chciałbym wyodrębnić parametry z tych adresów URL i uzyskać je w skrócie. Oczywiście mogłem używać wyrażeń regularnych, ale zastanawiałem się tylko, czy istnieje prostszy sposób na zrobienie tego z Rubim lub Railsami. Nie znalazłem nic w module Ruby, URI
ale może coś przeoczyłem.
Właściwie potrzebuję metody, która by to zrobiła:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Czy masz jakieś rady?
ruby-on-rails
ruby
uri
url-parameters
Flackou
źródło
źródło
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
To też by działało, ale to prawdopodobnie najgorsza opcja w tym przypadku. Ale nadal możesz uznać ten fragment za interesujący. (Publikowanie jako komentarz, ponieważ nie uważam tego za odpowiedź :-))Odpowiedzi:
Myślę, że chcesz zamienić dowolny ciąg adresu URL w HASH?
Możesz spróbować http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
zwroty
źródło
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
Okazało się, że potrzebuję tego samego w przypadku niedawnego projektu. Opierając się na rozwiązaniu Levi's, oto czystsza i szybsza metoda:
źródło
param1=value1¶m1=value2
. Druga wartość jest ważniejsza od pierwszej.Rack::Utils.build_nested_query(params)
(lubRack::Utils.build_query(params)
jeśli zostanie przeanalizowanyRack::Utils.parse_query
).Just Improved dzięki powyższej odpowiedzi Levi -
W przypadku ciągu, takiego jak powyższy adres URL, zwróci
źródło
Rack::Utils.build_query(params)
.Aby uzyskać czyste rozwiązanie Ruby, połącz
URI.parse
zCGI.parse
(można tego użyć nawet jeśli Rails / Rack itp. Nie są wymagane):źródło
Istnieje więcej niż jeden sposób rozwiązania problemu. Inni pokazali ci kilka sztuczek. Znam inną sztuczkę. Oto moja próba: -
Przeczytaj dokumentację dotyczącą metody
::decode_www_form
.źródło
Sprawdź adresowalny klejnot - popularny zamiennik modułu URI Ruby, który ułatwia analizowanie zapytań:
(Najwyraźniej obsługuje również kodowanie / dekodowanie parametrów, w przeciwieństwie do URI)
źródło
W swoim kontrolerze powinieneś mieć dostęp do słownika (hash) o nazwie
params
. Tak więc, jeśli wiesz, jakie są nazwy każdego parametru zapytania, po prostu zrób to,params[:param1]
aby uzyskać do niego dostęp ... Jeśli nie wiesz, jakie są nazwy parametrów, możesz przeszukać słownik i uzyskać klucze.Kilka prostych przykładów tutaj .
źródło