web-dev-qa-db-ja.com

railsの先行ゼロ

私のアプリケーションには両方とも整数のフィールドhrminがあります。 hrフィールドでは、ユーザーが「1」を入力した場合、データベースに保存する前にRailsが自動的に「01」に埋め込まれるようにします。また、minフィールドでは、ユーザーが「0」を入力した場合、「00」として入力する必要があります。

これどうやってするの?

141
ed1t

整数として保存し、実行時に説明したとおりに表示する方が良いでしょう。すべての言語には、ゼロを埋め込む独自の方法があります-Rubyには String#rjust を使用できます。このメソッドは、指定されたパディング文字を使用して、指定された長さになるように文字列(右寄せ)をパディングします。

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

integerstrの長さより大きい場合、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'
319
Jon Gauthier

次を使用して、整数をその種類の文字列に変換できます。

result_string = '%02i' % your_integer

これは、dbに保存される方法とは無関係です。

58
J-_-L

これも非常に便利です。

"%.2d" % integer

結果の文字列は2文字になり、数字が2文字未満の場合、文字列には0が含まれます。

18
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