Подтвердить что ты не робот

Разбирайте строку так, как если бы она была запросом в Ruby on Rails

У меня есть строка вроде этого:

"foo=bar&bar=foo&hello=hi"

Предоставляет ли Ruby on Rails методы для синтаксического анализа этого, как если бы это был запрос, поэтому я получаю хеш вроде этого:

{
    :foo => "bar",
    :bar => "foo",
    :hello => "hi"
}

Или я должен написать сам?

ИЗМЕНИТЬ

Обратите внимание, что приведенная выше строка не является реальной верификацией из URL-адреса, а скорее строкой, хранящейся в файле cookie из Facebook Connect.

4b9b3361

Ответ 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"}