今日勉強していて初めて扱うカラムのデータ型があったので紹介します!
booleanとは??
true/falseのいずれかを扱うことを想定して設定するカラムです。
例えばDM機能においてメッセージを既読か未読に分けたいとき、
既読=true、未読=falseと扱うとデータの管理がしやすくなります。
しかし、マイグレーションファイルに何も制約(あとで説明します)をつけないと、
nilというカラムの値も存在してしまいます。
制約とは?
NOT NULL制約
モデルを作った時点では、値としてtrue
、false
、nil
の3つが存在してしまい、
nil=??という状態ができてしまうため、booleanを扱うカラムは、
基本的にnull: false
という記述をセットでしましょう。
この記述をNOT NULL制約と言います。
DEFAULT制約
また、booleanではもう一つ重要な設定が必要です。それはdefaultがtrueかfalseかという記述です。
この記述がないと、初期の状態(default)がどちらか定まりません。
先ほどの既読や未読の例を用いると未読が初期状態か既読が初期状態か
分からなくなってしまい、データ管理ができなくなります。
(既読がdefaultだとしたら、既読という概念自体いらなくなってしまいます。)
そのため、defaultの記述も必ずモデル作成後に行いましょう。
(default: false
or default: true
)
このような記述のことをDEFAULT制約といいます。
まとめ
booleanというデータ型を用いたときは、NOT NULL制約とDEFAULT制約の2点セットを
マイグレーションファイルに追加し、rails db:migrateすることを忘れないようにしましょう。
記述例も一応載せておきます。(既読か未読か管理する場合のカラム設定)
t.boolean :read, default: false, null: false