Help us understand the problem. What is going on with this article?

railsのバリデーションとnull: false 自分用メモ

バリデーションとは、リクエスト側が送信した特定のカラムの値が空のままだったり、意図しない形で保存されるようなことを防ぐために、予めモデルに記述しておく、門番のような役割。

valid.png

上記の例だと、

text「通りまーす」
validates「待て」
text「えっ」
validates「お前何も入力されてないじゃないか。やり直し」
text「ぴえん」

こんな感じ。

一方でnull: falseとは。
実はこちらも空のままのデータを受け入れないための門番、その2。
null.png

じゃあどっちが良いのかっていうと、どっちも書くが正解。

なぜか。

理由は、前述した二つの要素にはひとつ、決定的な違いがあって、それは、「守っている場所が違う」こと。

バリデーションくんは、railsアプリの中で張っている門番。フォームからの送信などに対して取り締まってくれる。
対してnull: falseくんは、データベースの前で待ち構えている門番。こちらはデータベースへの直接の書き込みを防いでくれる。

銀行の窓口と、金庫前の警備員、のような関係。例えた結果、逆に分かりにくくなっている。

バリデーションが無いとアプリケーションが意図した挙動をしてくれなかったり、null: falseが無いと何らかの方法でデータベースに意図しないデータが送られた時に素通りしてしまう。

なので、二人仲良くデータベースを守っていって欲しい。

shinjinrui3
プログラミング初学者です。エンジニア転職目指してテックキャンプ で学習中。 初学者なりの気づきを綴っていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away