J'ai des champs hr
et min
, les deux entiers de mon application. Pour le champ hr
, si l'utilisateur entre "1", j'aimerais que Rails le compresse automatiquement sur "01" avant de l'enregistrer dans la base de données. Aussi pour le min
champ si l'utilisateur entre "0", il doit entrer "00".
Comment puis-je faire ceci?
Il serait préférable de le stocker en tant qu'entier et de simplement l'afficher comme vous l'avez décrit au moment de l'exécution. Chaque langue a sa propre manière de compléter les zéros - pour Ruby vous pouvez utiliser String # rjust . Cette méthode remplit une chaîne (justifiée à droite) de sorte qu'elle devienne un longueur donnée, en utilisant un caractère de remplissage donné.
str.rjust(integer, padstr=' ') → new_str
Si
integer
est supérieur à la longueur destr
, retourne un nouveauString
de longueurinteger
avecstr
justifié à droite et complété avecpadstr
; sinon, retournestr
.
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'
Vous pouvez transformer l'entier en une chaîne de ce type avec:
result_string = '%02i' % your_integer
Ceci est indépendant de la façon dont il est enregistré dans la base de données.
C'est aussi très pratique:
"%.2d" % integer
La chaîne résultante sera de 2 caractères et si le nombre est inférieur à 2 caractères, 0 sera présent dans la chaîne
Vous ne pouvez pas stocker 01
en entier. Il sera converti en 1
Vous pouvez le stocker en tant que chaîne, ou vous pouvez l'afficher en tant que chaîne "01"
J'aime l'opérateur%, même s'il semble être tombé en disgrâce ...
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
Une autre méthode consiste à remplir votre entier au moment de l'affichage en utilisant sprintf:
f = sprintf '%04d', 49
# f = "0049"