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

Как получить строку запроса из URL-адреса в Rails

Есть ли способ получить строку запроса в переданной строке URL в Rails?

Я хочу передать строку URL:

http://www.foo.com?id=4&empid=6

Как я могу получить id и empid?

4b9b3361

Ответ 1

Если у вас есть URL в строке, используйте URI и CGI, чтобы разделить его:

url    = 'http://www.foo.com?id=4&empid=6'
uri    = URI.parse(url)
params = CGI.parse(uri.query)
# params is now {"id"=>["4"], "empid"=>["6"]}

id     = params['id'].first
# id is now "4"

Пожалуйста, используйте стандартные библиотеки для этого, не пытайтесь делать это самостоятельно с помощью регулярных выражений.

Также см. Комментарий Quv о Rack::Utils.parse_query ниже.

Рекомендации:

Ответ 2

В методе контроллера Ruby on Rails параметры URL доступны в хеше с именем params, где ключи являются именами параметров, но как "символы" Ruby (т.е. префикс двоеточия). Поэтому в вашем примере params[:id] будет равняться 4, а params[:empid] будет равно 6.

Я бы рекомендовал прочитать хороший учебник Rails, который должен осветить основы, подобные этому. Здесь один пример - google появится намного больше:

Ответ 3

vars = request.query_parameters
vars['id']
vars['empid']

и т.д..

Ответ 4

Rack::Utils.parse_nested_query("a=2") #=> {"a" => "2"}

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

Строки запроса анализа, как это делают рельсовые контроллеры. Вложенные запросы, как правило, с помощью имени поля формы, такого как lil guy: name="awesome[beer][chips]" # => "?awesome%5Bbeer%5D%5Bchips%5D=cool", get 'sliced-and-diced' в потрясающий хеш: {"awesome"=>{"beer"=>{"chips"=>nil}}}

http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L90

Ответ 5

Это не лучший метод, но он работает:

request.query_string.split(/&/).inject({}) do |hash, setting|
  key, val = setting.split(/=/)
  hash[key.to_sym] = val
  hash
end

Это приведет к возврату хэша со всеми параметрами GET (:name => value). Или просто используйте метод request.query_string, зависит от того, в каком формате вы хотите получить параметры GET. Также вы можете использовать request.query_params из rake gem.