Есть ли библиотека Ruby/gem, которая будет генерировать URL-адрес на основе набора параметров?
Механизм генерации URL-адресов Rails (большинство из которых проходит через polymorphic_url
в какой-то момент) позволяет передавать хэш, который сериализуется в строку запроса, по крайней мере, для запросов GET. Какой лучший способ получить такую функциональность, но поверх любого базового пути?
Например, я хотел бы иметь что-то вроде следующего:
generate_url('http://www.google.com/', :q => 'hello world')
# => 'http://www.google.com/?q=hello+world'
Я мог бы, конечно, написать свой собственный, который строго соответствует моим требованиям к приложениям, но если бы существовала какая-то каноническая библиотека, чтобы позаботиться об этом, я бы предпочел использовать это:).
Ответы
Ответ 1
Да, в стандартной библиотеке Ruby вы найдете целый модуль классов для работы с URI. Там один для HTTP. Вы можете вызвать #build
с некоторыми аргументами, как вы показали.
http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009497
Для самой строки запроса просто используйте добавление хэша Rails #to_query
. то есть.
uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query)
Ответ 2
Поздно к вечеринке, но позвольте мне настоятельно рекомендовать Addressable gem. В дополнение к другим полезным функциям он поддерживает запись и анализ uri с помощью шаблонов RFC 6570 URI. Чтобы адаптировать данный пример, попробуйте:
gsearch = Addressable::Template.new('http://google.com/{?query*}')
gsearch.expand(query: {:q => 'hello world'}).to_s
# => "http://www.google.com/?q=hello%20world"
или
gsearch = Addressable::Template.new('http://www.google.com/{?q}')
gsearch.expand(:q => 'hello world').to_s
# => "http://www.google.com/?q=hello%20world"