У меня есть форма, где мои пользователи могут зарегистрироваться на мой сайт.
Они заполняют их дата рождения в форме: 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
Проблема в том, что сами числа не имеют ведущих нулей (или, наоборот, имеют бесконечное количество ведущих нулей, которые никогда не печатаются). Чтобы получить ведущие нули, вам нужны строки. К счастью, в 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 за указание на этот бит.)
Попробуйте заполнить числами меньше 10, например:
= f.select(:birthmonth, options_for_select((1..12).collect{ |i| i < 10 ? "0#{i}" : i }))
Если это чисто презентационная проблема, вы можете создать пары [текст, значение] и передать их в options_for_select :
Учитывая контейнер, в котором элементы отвечают на первый и последний (например, двухэлементный массив), «последние» служат значениями опций, а «первые» - текстом опций.
Итак, что-то вроде:
options_for_select((1..12).map {|n| ["%02d" % n, n]})
Таким образом, вы сможете сохранить свою логику проверки как есть.