ヘイヘイバリデーションってモデルとマイグレーションファイルどっちに書けば良いんだyo


本日2記事目ですね。
もうビール飲みたいけどまだ飲まないんだから!!
(飲みながら記事書いて、誤字脱字多かったら絶望なため)

さーて今回はバリデーションを書く場所について。

張り切っていくわよ〜〜〜〜!!

1 モデルへのバリデーション

user.rb
  validates :email,           presence: true
  validates :first_name,      presence: true
  validates :last_name,       presence: true, length: { maximum: 15 }

こんな感じで書くと思うんですよ。
説明すると

【email】 空で値を保存できない
【first_name】 空で値を保存できない
【last_name】 空で値を保存できない、15文字以内じゃないと保存できない。

って感じのバリデーションを書きます。
じゃあこれで問題なしだね!!って思うでshow。

これだとmysql(DB)に直接打ち込む時にバリデーションかからないよ!!

そうなんです。
モデルへのバリデーションはRails側(MVC)の判定だけで、mysqlとかDBには反映されないんです。

2 それならマイグレーションファイルにバリデーションだっ!

migrate/create_users.rb
      t.string :first_name,         null:false
      t.string :last_name,          null:false
      t.string :email,              null:false

こっちではカラムに空の値では保存できない様バリデーションをかけています。

じゃあマイグレーションファイルだけにバリデーションかければよくね?

と思われるかもしれません。
ですがDBにバリデーションチェックをしてもらうと、わかりづらいエラーが返ってきたり、
もしくはモデルにちゃんとバリデーションを書いているとエラーメッセージを出せたりと色々汎用性があるのです。

3 結果 両方に書いた方が良い

結果これなんです。
めんどくさいかもしれないんですが、両方に書くのが安全なんです。

こんなメリットがあるよ!こんな危険性があるよ!
とか補足情報がありましたらご教示頂けたら幸いです。

読んで頂きありがとうございました!