Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
103
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@ryuuuuuuuuuu

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
103
Help us understand the problem. What are the problem?