чтение массива параметров в RoR - PullRequest
6 голосов
/ 13 апреля 2011

Если у меня есть URL что-то вроде ниже:

http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7

Тогда как мне прочитать все значения "x"?

Добавлен новый комментарий: Спасибо за все ваши ответы. Я в основном из Java и .Net фона и недавно начал искать Ruby и Rails. Как и в Java, разве у нас нет ничего похожего на request.getParameterValues ​​("x");

Ответы [ 3 ]

26 голосов
/ 13 апреля 2011

Вы должны использовать следующий URL вместо вашего:

http://test.com?x[]=1&x[]=2

, и тогда вы получите эти параметры в виде массива:

p params[:x] # => ["1", "2"]
3 голосов
/ 13 апреля 2011

ЕСЛИ ЭТО СТРОКА, но не запрос http

Сделайте это:

url = 'http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7'

p url.split(/(?:\A.*?|&)x=/).drop(1)

Если вы хотите преобразовать их в целые числа, выполните:

p url.split(/(?:\A.*?|&)x=/).drop(1).map(&:to_i)  (ruby 1.9)

или

p url.split(/(?:\A.*?|&)x=/).drop(1).map{|v| v.to_i}
2 голосов
/ 13 апреля 2011

ЕСЛИ ЭТО СТРОКА, но не запрос http Я даже не представлял, не знает ли автор, как обрабатывать параметры URL-адреса запроса ...

url = "http://test.com?x=1&x=2&x=3&x=4&x=5&x=6&x=7"
vars = url.scan(/[^?](x)=([^&]*)/)
#=> [["x", "2"], ["x", "3"], ["x", "4"], ["x", "5"], ["x", "6"], ["x", "7"]] 
x = vars.map{|a| a[1]}
#=> ["2", "3", "4", "5", "6", "7"]
x.map!(&:to_i)
#=> [2, 3, 4, 5, 6, 7] 

Или, если вам нужно извлечь только valuse:

vars = url.scan(/[^?]x=([^&]*)/).flatten
#=> ["2", "3", "4", "5", "6", "7"]
vars = url.scan(/[^?]x=([^&]*)/).flatten.map(&:to_i)
#=> [2, 3, 4, 5, 6, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...