はじめに
オリジナルアプリを作成中に、カラムの型について学んだので、投稿する。
integre型について
integer型は、金額や数値などを扱いたい時に使う。
やりたかったこと
テーブルに、小数点が含まれた数値を保存したかった。
なので、integre型を使うのかと思い、カラムの型をinteger型で指定した。
t.decimal :energy, integer # エネルギー(kcal)
t.decimal :protein, integer # タンパク質(g)
t.decimal :lipid, integer # 脂質(g)
t.decimal :carbohydrate, integer # 炭水化物(g)
t.decimal :salt_equivalent, integer# 食塩相当量(g)
しかし、テーブルにデータは保存できたものの、小数点以下の数値は保存されていなかった。
例:
152.3としたかったのに、実際は152のような形式になってしまう。
改善したこと
integer型からdecimal型に変更した。
t.decimal :energy, precision: 4, scale: 1 # エネルギー(kcal)
t.decimal :protein, precision: 4, scale: 1 # タンパク質(g)
t.decimal :lipid, precision: 4, scale: 1 # 脂質(g)
t.decimal :carbohydrate, precision: 4, scale: 1 # 炭水化物(g)
t.decimal :salt_equivalent, precision: 4, scale: 1 # 食塩相当量(g)
decimal型を使うことで、小数点が含まれた数値を扱うことができる。
precisionは、小数点を含めた全ての桁数のを指定する。
scaleは、小数点の桁数を指定する。
実は、integer型は整数しか扱えない性質のようだ。
最後に
テーブルで小数点を扱いたい場合は、decimal型を指定して、raild db:migrateを行う。