Есть ли способ получить строку запроса в переданной строке URL в Rails?
Я хочу передать строку URL:
http://www.foo.com?id=4&empid=6
Как я могу получить id
и empid
?
Есть ли способ получить строку запроса в переданной строке URL в Rails?
Я хочу передать строку URL:
http://www.foo.com?id=4&empid=6
Как я могу получить id
и empid
?
Если у вас есть 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
ниже.
Рекомендации:
В методе контроллера Ruby on Rails параметры URL доступны в хеше с именем params
, где ключи являются именами параметров, но как "символы" Ruby (т.е. префикс двоеточия). Поэтому в вашем примере params[:id]
будет равняться 4
, а params[:empid]
будет равно 6
.
Я бы рекомендовал прочитать хороший учебник Rails, который должен осветить основы, подобные этому. Здесь один пример - google появится намного больше:
vars = request.query_parameters
vars['id']
vars['empid']
и т.д..
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
Это не лучший метод, но он работает:
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.