Railsのバリデーションについて、自分なりに理解した内容をまとめてみた
Railsを勉強していて「バリデーション」というものに出てきたので、自分の理解を整理する意味も込めて書いてみます。
まだ勉強し始めたばかりなので、間違っているところがあったら教えてもらえると嬉しいです!
バリデーションって何?
簡単に言うと「データベースに保存する前に、そのデータがちゃんとした内容になっているかチェックする仕組み」のことみたいです。
たとえば、名前が空っぽのままユーザー登録できてしまったら困流ので、そういうのを防いでくれるのがバリデーションだと理解しています。
イメージとしてはこんな感じです。
- 条件をクリアしていたら → そのままデータベースに保存される
- 条件をクリアできていなかったら → 保存されずに、
errorsというところにエラーメッセージが溜まっていく
よく使うバリデーションの種類
存在するかどうか(presence)
そのフィールドが空じゃないかをチェックするやつです。nameを必須にしたいときとかに使う感じ。空のまま送信されるとエラーになります。
文字数(length)
文字数の上限・下限を決められるやつです。「パスワードは8文字以上」みたいな設定でよく見かけました。
重複してないか(uniqueness)
同じ値がすでに登録されていないかを確認するものです。メールアドレスの重複登録を防ぐときの定番みたいです。
確認用の値と一致してるか(confirmation)
これが自分が最初に気になっていた「一致の確認」というやつでした。パスワードを登録するときに、もう一つpassword_confirmationみたいなフィールドを用意して、そこに入れた値と一致しているかをチェックする仕組みでした。「パスワード(確認用)」って入力欄、あれのことだったんですね。
全体の流れをまとめると
- ユーザーがフォームに入力して送信する
- モデル側に書いてあるバリデーションのルールと照らし合わせる
- 条件を満たしていれば保存される
- 満たしていなければ保存はストップして、
errorsにエラー内容が入る - ビュー側でその
errorsを表示して、ユーザーに「ここが間違ってますよ」と伝える
こうやって流れで見ると、「なぜ保存前にチェックが必要なのか」がなんとなく腑に落ちた気がします。フォームに変な値が送られてきても、バリデーションのおかげでデータベースの中身がぐちゃぐちゃにならずに済むんだということがわかった気がします。
おわりに
まだ触り始めたばかりなので浅い理解かもしれませんが、自分の頭の整理のために書いてみました。
次は実際に自分でモデルにバリデーションを書いて、エラーメッセージを表示するところまでやってみようと思います。