LoginSignup
2
4

More than 3 years have passed since last update.

Ruby on Rails バリデーションまとめ

Last updated at Posted at 2020-09-21

はじめに

主にRails Tutorialの備忘録として、例などをまとめてみます。
間違い等ありましたらご指摘いただけますと幸いです。

バリデーションとは

オブジェクトをデータベースに保存する前に、オブジェクトの状態を検証することです。
入力された値が無効ではないことを検証します。
例えば、空のデータが保存されないようにしたり、文字数に制限を儲けたりすることができます。

基本的な書き方

基本的な記入方法は以下です。

model
validates :カラム名, ヘルパー

#複数のカラムに適用したい場合
validates :カラム名, :カラム名, :カラム名, ヘルパー

主なバリデーションのヘルパー

presence

指定された属性が空でないことを確認します。

model
validates カラム名, presence: true
model
validates :name, presence: true

#複数のカラムに適用したい場合
validates :name, :login, :email, presence: true

length

属性の値の長さを検証します。多くのオプションがあり、さまざまな長さ制限を指定できます。

model
validates カラム名, length: { 制限 }
model
  validates :passward, length: { minimum: 5 }        #5文字以上
  validates :name, length: { maximum: 50 }           #20文字以下
  validates :passward, length: { in: 3..10  }        #3文字以上10文字以下
  validates :registration_number, length: { is: 6 }  #6文字のみ許可

uniqueness

属性の値が一意(unique)であり重複していないことを検証します。

model
validates :カラム名, uniqueness: true
model
validates :name, uniqueness: true

acceptance

フォームが送信された時に、チェックボックスがオンになっているかどうかを検証します。
「サービスの利用規約に同意する」にチェックする必要がある場合などに利用されます。

model
validates :カラム名, acceptance: true
model
validates :terms_of_service, acceptance: true

confirmation

複数のフォームで入力された値が完全に一致するかどうかを検証します。
メールアドレスと確認用メールアドレスの値の一致などに利用されます。

model
validates :カラム名, confirmation: true
model
validates :email, confirmation: true

numericality

属性に数値のみが使われていることを検証します。

model
validates カラム名, numericality: true
model
validates :points, numericality: true
model
#整数のみ許可
validates :age, numericality: { only_integer: true }
主なオプション
オプション 概要
:only_integer 整数でなけえればならない
:equal_to 指定された値と等しくなければならない

format

withオプションで与えられた正規表現と属性の値がマッチするかどうかのテストによる検証を行います。

model
validates :カラム名, format: { with: 制限 }
model
#英数字のみ許可
validates :password, format: { with: /\A[a-zA-Z]+\z/ } 

#有効なメールアドレスのみ許可
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
 validates :email, format: { with: VALID_EMAIL_REGEX }

上記のような、有効なメールアドレスのみ許可するための正規表現は以下のような表に基づいています。

正規表現 概要
z\d-.]+.[a-z]+\z/i 完全な正規表現
/ 正規表現の開始を示す
\A 文字列の先頭
[\w+-.]+ 英数字、アンダースコア(_)、プラス(+)、ハイフン(-)、ドット(.)のいずれかを少なくとも1文字以上繰り返す
@ アットマーク
[a-z\d-.]+ 英小文字、数字、ハイフン、ドットのいずれかを少なくとも1文字以上繰り返す
. ドット
[a-z]+ 英小文字を少なくとも1文字以上繰り返す
\z 文字列の末尾
/ 正規表現の終わりを示す
i 大文字小文字を無視するオプション

共通のオプション

1 2
:message バリデーション失敗時に表示されるエラーメッセージを指定できます。指定しない場合、デフォルトのメッセージが表示されます。
:allow_nill 対象の値がnilの場合にバリデーションをスキップします。
:allow_blank 属性の値がblank?に該当する場合(nilや空文字など)にバリデーションがパスします。
model
# メッセージを直書きする場合
validates カラム名, presence: { message: “カスタムエラーメッセージ” } 
model
validates :name, presence: { message: “必須項目です” }

参考

Active Record バリデーション - Railsガイド v6.0
https://railsguides.jp/active_record_validations.html

2
4
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
2
4