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