バリデーションとは、リクエスト側が送信した特定のカラムの値が空のままだったり、意図しない形で保存されるようなことを防ぐために、予めモデルに記述しておく、門番のような役割。
上記の例だと、
text「通りまーす」
validates「待て」
text「えっ」
validates「お前何も入力されてないじゃないか。やり直し」
text「ぴえん」
こんな感じ。
一方でnull: falseとは。
実はこちらも空のままのデータを受け入れないための門番、その2。
じゃあどっちが良いのかっていうと、どっちも書くが正解。
なぜか。
理由は、前述した二つの要素にはひとつ、決定的な違いがあって、それは、「守っている場所が違う」こと。
バリデーションくんは、railsアプリの中で張っている門番。フォームからの送信などに対して取り締まってくれる。
対してnull: falseくんは、データベースの前で待ち構えている門番。こちらはデータベースへの直接の書き込みを防いでくれる。
銀行の窓口と、金庫前の警備員、のような関係。例えた結果、逆に分かりにくくなっている。
バリデーションが無いとアプリケーションが意図した挙動をしてくれなかったり、null: falseが無いと何らかの方法でデータベースに意図しないデータが送られた時に素通りしてしまう。
なので、二人仲良くデータベースを守っていって欲しい。