私のアプリケーションには両方とも整数のフィールドhr
とmin
があります。 hr
フィールドでは、ユーザーが「1」を入力した場合、データベースに保存する前にRailsが自動的に「01」に埋め込まれるようにします。また、min
フィールドでは、ユーザーが「0」を入力した場合、「00」として入力する必要があります。
これどうやってするの?
整数として保存し、実行時に説明したとおりに表示する方が良いでしょう。すべての言語には、ゼロを埋め込む独自の方法があります-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'
次を使用して、整数をその種類の文字列に変換できます。
result_string = '%02i' % your_integer
これは、dbに保存される方法とは無関係です。
これも非常に便利です。
"%.2d" % integer
結果の文字列は2文字になり、数字が2文字未満の場合、文字列には0が含まれます。
01
を整数として保存することはできません。 1
に変換されます
文字列として保存することも、文字列「01」として表示することもできます
私は%演算子が好きですが、好まれなくなったようです...
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
これを実現する別の方法は、sprintfを使用して、表示時に整数を埋め込むことです。
f = sprintf '%04d', 49
# f = "0049"