it-roy-ru.com

ведущие нули в rails

У меня есть поля hr и min, оба целых числа в моем приложении. Для поля hr, если пользователь вводит "1", я бы хотел, чтобы Rails автоматически дописал его до "01" перед сохранением в базе данных. Также для поля min, если пользователь вводит "0", оно должно быть указано как "00".

Как я могу это сделать?

140
ed1t

Было бы лучше сохранить его как целое число и просто отобразить, как вы описали во время выполнения. Каждый язык имеет свой собственный способ дополнения нулями - для Ruby вы можете использовать String # rjust . Этот метод дополняет строку (выравнивание по правому краю), чтобы она стала заданной длины, используя заданный символ заполнения.

str.rjust(integer, padstr=' ') → new_str

Если integer больше длины str, возвращает новое String длины integer с str, выровненным по правому краю и дополненным padstr; в противном случае возвращает str.

some_int = 5
some_int.to_s.rjust(2, '0')  # => '05'
some_int.to_s.rjust(5, '0')  # => '00005'

another_int = 150
another_int.to_s.rjust(2, '0') # => '150'
another_int.to_s.rjust(3, '0') # => '150'
another_int.to_s.rjust(5, '0') # => '00150'
316
Jon Gauthier

Вы можете преобразовать целое число в строку такого типа с помощью:

result_string = '%02i' % your_integer

Это не зависит от того, как оно сохраняется в БД.

58
J-_-L

Это также очень удобно:

"%.2d" % integer

Результирующая строка будет иметь 2 символа, и если число меньше 2 символов, то в строке будут присутствовать 0

17
Sumit Bisht

Вы не можете хранить 01 как целое число. Он будет преобразован в 1

Вы можете сохранить это как строку, или вы можете показать это как строку "01"

8
fl00r

Мне нравится оператор%, хотя он, кажется, вышел из фаворита ...

2.0.0-p247 :001 > '%02i' % 1
 => "01"
2.0.0-p247 :002 > '%2i' % 1
 => " 1"
2.0.0-p247 :003 > '%-2i' % 1
 => "1 "
6
nroose

Другой способ добиться этого - заполнить целое число во время отображения, используя sprintf:

f = sprintf '%04d', 49
# f = "0049"
2
SylvainB