LoginSignup
122
133

More than 3 years have passed since last update.

Railsバリデーションまとめ

Last updated at Posted at 2018-10-19

バリデーションを行なう理由

バリデーションは、正しいデータだけをデータベースに保存するために行われます。

バリデーションヘルパー

よく見るやつ

format

validates :email, format: { with: /\A[a-zA-Z]+\z/}

formatはwithオプションを指定した正規表現と一致するかどうかを調べます。

inclusion

 validates :number, inclusion: { in: (1..100)}

inclusionは与えられた集合に属性の値が含まれているかどうかを検証します。

length

validates :name, length: { maximum: 20 }

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

:minimum - 属性はこの値より小さな値を取れません。
:maximum - 属性はこの値より大きな値を取れません。
:in または :within - 属性の長さは、与えられた区間以内でなければなりません。このオプションの値は範囲でなければなりません。
:is - 属性の長さは与えられた値と等しくなければなりません。

presence

validates :name, presence: true

presenceは指定された属性が空でないことを確認します。値がnilや空文字でない(つまり空欄でもなければホワイトスペースでもない)ことを確認するために、内部ではblank?メソッドを使用しています。

uniqueness

validates :email, uniqueness: true

uniquenessはオブジェクトが保存される直前に、属性の値が一意であり重複していないことを検証します。

その他にもある

共通のバリデーションオプション

:allow_nil

validates :name, length: { minimum: 5 }, allow_nil: true

:allow_nilオプションは、対象の値がnilの場合にバリデーションをスキップします。

:allow_blank

validates :name, length: { minimum: 5 }, allow_blank: true

このオプションを指定すると、値が空の場合はバリデーションを実行しません。
属性の値がblank?に該当する場合にバリデーションがパスします。blank?に該当する値にはnilと空文字も含まれます。

:message

validates :email, format: { with: /\A[a-zA-Z]+\z/,
    message: "英文字のみが使用できます" }

:messageオプションを使用することで、バリデーション失敗時にerrorsコレクションに追加されるカスタムエラーメッセージを指定できます。このオプションを使用しない場合、Active Recordはバリデーションヘルパーごとにデフォルトのエラーメッセージを使用します。

:on

validates :email, presence: true, on: :create      ←create時にバリデーション

:onオプションは、バリデーション実行のタイミングを指定します。ビルトインのバリデーションヘルパーは、デフォルトでは保存時に実行されます。これはレコードの作成時および更新時のどちらの場合にも行われます。バリデーションのタイミングを変更したい場合、on: :createを指定すればレコード新規作成時にのみ検証が行われ、on: :updateを指定すればレコードの更新時にのみ検証が行われます。

参考:https://railsguides.jp/active_record_validations.html#%E5%85%B1%E9%80%9A%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3

122
133
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
122
133