Разбирайте строку так, как если бы она была запросом в Ruby on Rails
У меня есть строка вроде этого:
"foo=bar&bar=foo&hello=hi"
Предоставляет ли Ruby on Rails методы для синтаксического анализа этого, как если бы это был запрос, поэтому я получаю хеш вроде этого:
{
:foo => "bar",
:bar => "foo",
:hello => "hi"
}
Или я должен написать сам?
ИЗМЕНИТЬ
Обратите внимание, что приведенная выше строка не является реальной верификацией из URL-адреса, а скорее строкой, хранящейся в файле cookie из Facebook Connect.
Ответы
Ответ 1
Ответ зависит от версии Rails, которую вы используете. Если вы используете 2.3 или новее, используйте встроенный парсер Rack для параметров
Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}
Если вы находитесь на старых Rails, вы действительно можете использовать CGI::parse
. Обратите внимание, что обработка хэшей и массивов отличается тонким образом между модулями, поэтому вам нужно проверить, правильно ли данные, которые вы получаете, для выбранного вами метода.
Вы также можете включить Rack::Utils
в свой класс для сокращенного доступа.
Ответ 2
CGI::parse("foo=bar&bar=foo&hello=hi")
Дает вам
{"foo"=>["bar"], "hello"=>["hi"], "bar"=>["foo"]}
Ответ 3
Изменить:, как сказано в комментариях, symolizing keys могут привести ваш сервер вниз, если кто-то хочет причинить вам вред. Я по-прежнему много делаю, когда работаю в низкопрофильных приложениях, потому что это упрощает работу, но я бы больше не делал этого для приложений с высокой ставкой.
Не забудьте символизировать ключи для получения желаемого результата
Rack::Utils.parse_nested_query("a=2&b=tralalala").deep_symbolize_keys
эта операция деструктивна для дубликатов.
Ответ 4
Если вы говорите о Urls, который используется для получения данных о параметрах, они
> request.url
=> "http://localhost:3000/restaurants/lokesh-dhaba?data=some&more=thisIsMore"
Затем, чтобы получить параметры запроса. использовать
> request.query_parameters
=> {"data"=>"some", "more"=>"thisIsMore"}