6
2

More than 3 years have passed since last update.

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

Posted at

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

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

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

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。:santa:

これだと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 結果 両方に書いた方が良い

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

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

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

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2