ведущие нули в рельсах

152

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

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

ed1t
источник

Ответы:

336

Было бы лучше сохранить его как целое число и просто отобразить его, как вы описали во время выполнения. Каждый язык имеет свой собственный способ дополнения нулями - для 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'
Джон Готье
источник
20

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

"%.2d" % integer

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

Сумит Бишт
источник
8

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

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

fl00r
источник
4
Сохраните его как целое число и покажите его как строку (дополненную нулями). Java StringUtils в Apache имеет такой хороший метод pad. Нашел эту ветку
McStretch,
6

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

2.0.0-p247 :001 > '%02i' % 1
 => "01"
2.0.0-p247 :002 > '%2i' % 1
 => " 1"
2.0.0-p247 :003 > '%-2i' % 1
 => "1 "
nroose
источник
3

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

f = sprintf '%04d', 49
# f = "0049"
SylvainB
источник
-5

Попробуйте это, и вы можете изменить их в соответствии

def numeric92(num)
  if num.present?
    if num < 0 && num > -1
      ('-%05d' % num) + '.' + ('%.2f' % num).split('.').last
    else
      ('%06d' % num) + '.' + ('%.2f' % num).split('.').last
    end
  else
    '000000.00'
  end
end
Ksaynice
источник
1
Что именно if num < 0 && num > -1?
Франциско Кинтеро