##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の判定を行う方法を現役エンジニアが解説【初心者向け】