Help us understand the problem. What is going on with this article?

Railsバリデーションまとめ

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

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

バリデーションヘルパー

よく見るやつ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした