Диапазон с начальным нулем в рубине

У меня есть форма, где мои пользователи могут зарегистрироваться на мой сайт.

Они заполняют их дата рождения в форме: birthyear, birthmonth и день рождения.

Таким образом, я использую Диапазон для создания выбора в форме как это:

= f.select(:birthmonth, options_for_select((1..12)))

Но это не запускает единственные числа цифры с нуля как, я хочу: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10 и так далее..

Я даже попробовал это, но это не работало:

= f.select(:birthmonth, options_for_select((01..12)))

Кто-либо, которые знают, как заставить Диапазон запускаться с начальных нулей? Или какой-либо другой способ сделать это так я могу использовать его в проверке?:

validates_inclusion_of :birthmonth, :in => 1..12
5
задан meagar 29 June 2012 в 17:09
поделиться

3 ответа

Проблема в том, что сами числа не имеют ведущих нулей (или, наоборот, имеют бесконечное количество ведущих нулей, которые никогда не печатаются). Чтобы получить ведущие нули, вам нужны строки. К счастью, в Ruby встроена такая возможность форматирования строк.

= f.select(:birthmonth, options_for_select((1..12).map {|n| "%02d" % n}))

% 02d - это спецификатор форматирования, означающий «дополнить его ведущими нулями, если он меньше двух цифр»

. проверки, вам нужно будет выполнить такое же преобразование:

validates_inclusion_of :birthmonth, :in => (1..12).map {|n| "%02d" % n}

(Спасибо @ r-dub за указание на этот бит.)

16
ответ дан 18 December 2019 в 05:31
поделиться

Попробуйте заполнить числами меньше 10, например:

= f.select(:birthmonth, options_for_select((1..12).collect{ |i| i < 10 ? "0#{i}" : i }))
0
ответ дан 18 December 2019 в 05:31
поделиться

Если это чисто презентационная проблема, вы можете создать пары [текст, значение] и передать их в options_for_select :

Учитывая контейнер, в котором элементы отвечают на первый и последний (например, двухэлементный массив), «последние» служат значениями опций, а «первые» - текстом опций.

Итак, что-то вроде:

options_for_select((1..12).map {|n| ["%02d" % n, n]})

Таким образом, вы сможете сохранить свою логику проверки как есть.

2
ответ дан 18 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: