it-swarm.com.ru

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

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

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

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

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

52
Prasaanth Naidu

Если у вас есть 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 ниже.

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

77
mu is too short

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

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

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

так далее..

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

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

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

http://rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_queryhttps://github.com/rack/rack/blob/master/lib/ стойки/utils.rb # L9

15
SoAwesomeMan

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

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.

0
Mikhail Nikalyukin