#はじめに
主にRails Tutorialの備忘録として、例などをまとめてみます。
間違い等ありましたらご指摘いただけますと幸いです。
#バリデーションとは
オブジェクトをデータベースに保存する前に、オブジェクトの状態を検証することです。
入力された値が無効ではないことを検証します。
例えば、空のデータが保存されないようにしたり、文字数に制限を儲けたりすることができます。
#基本的な書き方
基本的な記入方法は以下です。
validates :カラム名, ヘルパー
#複数のカラムに適用したい場合
validates :カラム名, :カラム名, :カラム名, ヘルパー
#主なバリデーションのヘルパー
###presence
指定された属性が空でないことを確認します。
validates カラム名, presence: true
validates :name, presence: true
#複数のカラムに適用したい場合
validates :name, :login, :email, presence: true
###length
属性の値の長さを検証します。多くのオプションがあり、さまざまな長さ制限を指定できます。
validates カラム名, length: { 制限 }
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)であり重複していないことを検証します。
validates :カラム名, uniqueness: true
validates :name, uniqueness: true
###acceptance
フォームが送信された時に、チェックボックスがオンになっているかどうかを検証します。
「サービスの利用規約に同意する」にチェックする必要がある場合などに利用されます。
validates :カラム名, acceptance: true
validates :terms_of_service, acceptance: true
###confirmation
複数のフォームで入力された値が完全に一致するかどうかを検証します。
メールアドレスと確認用メールアドレスの値の一致などに利用されます。
validates :カラム名, confirmation: true
validates :email, confirmation: true
###numericality
属性に数値のみが使われていることを検証します。
validates カラム名, numericality: true
validates :points, numericality: true
#整数のみ許可
validates :age, numericality: { only_integer: true }
#####主なオプション
オプション | 概要 |
---|---|
:only_integer | 整数でなけえればならない |
:equal_to | 指定された値と等しくなければならない |
###format
withオプションで与えられた正規表現と属性の値がマッチするかどうかのテストによる検証を行います。
validates :カラム名, format: { with: 制限 }
#英数字のみ許可
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や空文字など)にバリデーションがパスします。 |
# メッセージを直書きする場合
validates カラム名, presence: { message: “カスタムエラーメッセージ” }
validates :name, presence: { message: “必須項目です” }
##参考
Active Record バリデーション - Railsガイド v6.0
https://railsguides.jp/active_record_validations.html