はじめに
本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
今回の疑問点
今回の疑問点は、
Not Null制約とバリデーション(presence: true
)の違い
です。
以前、テーブル定義を考えていた際に疑問を抱きました。
疑問点についての解説
###結論
Not Null制約
:データベースの項目に付与するNullに対する制約。Nullを拒否、空文字は拒否しない。
presence: true
:モデルへのバリデーション。Null及び空文字を拒否。
###空文字とは
空文字
: 長さ0の文字列
Null
:何も存在していない
cf. 空白
:半角スペース、全角スペース
###Not Null制約とバリデーション(presence: true
)は両方指定することができる
調べたところ、バリデーションはトラフィックが多い場合に不正な値がすり抜けてしまうことがあるようで、すり抜けても対処できるようにNot Null制約とバリデーションの両方を設定しておいた方が良いようです。
まとめ
最後にポイントをまとめます。
- Not Null制約とバリデーション(
presence: true
)の違いは空文字を拒否するか否か - バリデーションは不正な値がすり抜けてしまうことがあるので、Not Null制約とバリデーションの両方を設定した方が良い