テクノロジー
2017年9月12日Railsのバリデーションとは
今回は、アプリケーション内のデータに不要なものを入れないための機能であるバリデーションについて学んでいきます。
DBを健全な状態に保つためには、バリデーションで不正な値かどうかを確かめるのが必須となりますので、ぜひここで基本的な方法を学んでください。
バリデーションについて
今回は、アプリケーション内のデータに不要なものを入れないための機能であるバリデーションについて学んでいきます。
DBを健全な状態に保つためには、バリデーションで不正な値かどうかを確かめるのが必須となりますので、ぜひここで基本的な方法を学んでください。
バリデーションとは
バリデーションとは、不正な値をDBに侵入させないようにするための文法です。
バリデーションを記述するのは モデル
です。
なぜならモデルはDBとのやりとりをする役割があるからです。
つまり、バリデーションは 国境警備隊
のような役割を果たします。
では具体的な定義の仕方や種類を見ていきましょう。
バリデーションの種類
バリデーションは主に以下のような種類があります。
- 必須項目
- 一意性規約
- 長さ
- 正規表現
必須項目にしたいのであれば 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を不正な値のない健全な状態に保つことができます。