概要
Rails
で Boolean
型の値を入力必須にしたいときに presence: true
を使っても期待通りに動作しませんでした。この記事ではその原因と対処法について説明します。
原因
validates :column, presence: true
このように記述すると false
を選択した場合には値が入力されていないと認識されてしまい、バリデーションエラーが発生します。presence: true
は false
を無視してしまうため、Boolean
型の値には適していません。
対処法
validates :column, inclusion: { in: [true, false] }
inclusion
バリデーションを使って true
か false
のどちらかの値が含まれているかを確認します。これにより false
も有効な値として認識されるため、正しくバリデーションが行われます。
まとめ
Boolean
型の値を入力必須にしたい場合には presence: true
ではなく、inclusion: { in: [true, false] }
を使います。これにより false
も有効な値としてバリデーションを通過することができます。