テクノロジー

2017年9月12日

Railsのバリデーションとは

今回は、アプリケーション内のデータに不要なものを入れないための機能であるバリデーションについて学んでいきます。
DBを健全な状態に保つためには、バリデーションで不正な値かどうかを確かめるのが必須となりますので、ぜひここで基本的な方法を学んでください。

バリデーションについて

今回は、アプリケーション内のデータに不要なものを入れないための機能であるバリデーションについて学んでいきます。
DBを健全な状態に保つためには、バリデーションで不正な値かどうかを確かめるのが必須となりますので、ぜひここで基本的な方法を学んでください。

バリデーションとは

バリデーションとは、不正な値をDBに侵入させないようにするための文法です。
バリデーションを記述するのは モデル です。
なぜならモデルはDBとのやりとりをする役割があるからです。
つまり、バリデーションは 国境警備隊 のような役割を果たします。

https://diveintocode.gyazo.com/7541ab451fbc25b126967034cc34da75

では具体的な定義の仕方や種類を見ていきましょう。

バリデーションの種類

バリデーションは主に以下のような種類があります。

  • 必須項目
  • 一意性規約
  • 長さ
  • 正規表現

必須項目にしたいのであれば presence を定義します。
例えばコメントを必須にしたい場合は以下のように書くことができます。

validates :comment, presence: true

一意性規約、つまり他のレコードと丸かぶりしたくないのであれば uniqueness を定義します。
例えばメールアドレスの一意性を担保したい場合は以下のように書くことができます。

validates :email, uniqueness: true

長さを指定したいときは length を定義します。
例えばコメントの長さを10文字以上にしたい場合は以下のように書くことができます。

validates :comment, length: { minimum: 10 }

正規表現、つまり文字列のパターンを指定したいときは format を定義します。
例えば郵便番号は 3桁の数字 + ハイフン + 4桁の数字 なので以下のように書くことができます。

validates :zip_code, format: { with: /\A\d{3}\-?d{4}\z/ }

バリデーションの確認

バリデーションが働いているかはrails consoleで確認することができます。
先ほどtitleカラムを必須項目にしたので、titleを nil にしたり "" にした状態でsaveメソッドやcreateメソッドを実行します。

(コンソール)

~/workspace/achieve $ rails c
[1] pry(main)> Blog.create(title: '', content: '内容A')
(0.2ms)  BEGIN
(6.2ms)  ROLLBACK

上記のように、titleが空のblogをcreateしようとすると ROLLBACK となり、データが弾き返されていることがわかります。(保存に成功したらCOMMITとなります)

このようにバリデーションを活用することで、DBを不正な値のない健全な状態に保つことができます。

ダイビックのことをもっと知ってみませんか?