Zéros dans les rails

J’ai des champs hr et min , les deux entiers dans mon application. Pour le champ hr , si l’utilisateur entre “1”, je souhaite que Rails le mette automatiquement à “01” avant de l’enregistrer dans la firebase database. Également pour le champ min si l’utilisateur entre “0”, il devrait mettre “00”.

Comment puis-je faire ceci?

Il serait préférable de le stocker en tant qu’entier et de l’afficher comme vous l’avez décrit lors de l’exécution. Chaque langue a sa propre façon de gérer les zéros – pour Ruby, vous pouvez utiliser Ssortingng # rjust . Cette méthode remplit une chaîne (justifiée à droite) de sorte qu’elle devienne une longueur donnée, en utilisant un caractère de remplissage donné.

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

Si integer est supérieur à la longueur de str , renvoie une nouvelle Ssortingng de longueur integer avec str padstr justifiée et padstr par padstr ; sinon, renvoie 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' 

Vous pouvez transformer l’entier en une chaîne de ce type avec:

 result_ssortingng = '%02i' % your_integer 

Ceci est indépendant de la façon dont il est enregistré dans la firebase database.

  • Documentation RDoc
  • Explication et exemples

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, alors les 0 seront présents dans la chaîne.

Vous ne pouvez pas stocker 01 comme entier. Il sera converti en 1

Vous pouvez le stocker sous forme de chaîne, ou vous pouvez l’afficher sous forme de chaîne “01”

J’aime l’opérateur%, même s’il semble avoir perdu la faveur …

 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 façon d’y parvenir consiste à remplir votre entier au moment de l’affichage, en utilisant sprintf:

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

Essayez ceci et vous pouvez les changer pour correspondre

 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