booleanとは
booleanとは、一般的には真と偽のような2つの状態を表すデータ型。stringやintegerのようにマイグレーションファイルに記述することができる。
boolean型のカラムを追加する時の注意点
↓NULL(Rubyのnil)が設定されることを禁止するオプション
t.boolean :checked, null: false, default: false
↑デフォルト値をfalseに設定
⚠️注意点
・デフォルト値を設定しておいた方が良いこと
・NOT NULL制約を設けること
デフォルト値を明示的に設定しなかった場合、新しいカラムにはNULが入る。
データベース(SQL)の世界において、NULLは特殊な存在である。
NULLはfalseの意味でもなく、「空(から)」の意味でもない。
NULLは 「まだ決まっていないから何も評価できない」の意味。(NULLの意味づけは文献によって異なる)
つまり、「true でも false でもない状態」 を表す。
よって、Boolean型のカラムにNULLが入ると、「true / false / NULL」の3つの状態が存在することになる。
しかし、Rubyでは 「nil と false はどちらも偽」 として扱われる。
このようにデータベースとRubyでは NULL/nilの取り扱いルールが異なっているので、データの検索の考え方が非常にややこしくなる。そのための注意点として上記の2点はしておいた方が良い。
presenceは使えない
boolean型のカラムについてバリデーションを設定するときにpresence: trueとしてしまうと、値が入っているはずなのにエラーになる。
presenceの定義上、falseという値では引っかかってしまう。
boolean型のカラムに値が入っていることを確かめたいときは、inclusionを使う。
class Post < ApplicationRecord
validates checked, inclusion: [true, false]
end
参考記事
Boolean型のカラムを追加するときは必ずデフォルト値を設定しよう
boolean型カラムが他の型と違うところ
Rubyでbooleanの判定を行う方法を現役エンジニアが解説【初心者向け】