ActiveRecord バリデーションメモ
久しぶりに触ったのでメモ代わり
バリデーションとは
バリデーションは、正しいデータだけをデータベースに保存するために行われます。
Active Record バリデーション - Railsガイド
バリデーションを定義することでデータベース保存前に不正なデータや無効なデータを検証して登録されることを防ぐことが出来る
基本的な書き方
validates カラム名, バリデーションヘルパー
よく使いそうなバリデーションヘルパー
・length
属性の長さを検証するヘルパー
class User < ApllicationRecord # 名前は20字まで validates :name, length: { maximum: 20 } # パスワードは8文字以上20字以内 validates :password, length: { in: 8..20 } end
オプション
- minimum 値の下限
- maximum 値の上限
- in または within 値の範囲
- is 同値
エラーメッセージはそれぞれ:too_short、:too_long、wrong_lengthでカスタマイズできる
・presence
属性が空でないことを検証するヘルパー
class User < ApllicationRecord validates :name, presence: true end
内部ではblank?メソッドを使っているため半角スペースなどもチェックできる
・numericality
属性に数値のみが使われてることを検証するヘルパー
class User < ApllicationRecord validates :age, numericality: { only_integer: true } end
:only_integerをtrueにすると整数のみ、デフォルトでは整数または浮動小数点にマッチ
・uniqueness
属性が一意で重複してないことを検証するヘルパー
class User < ApllicationRecord validates :email, uniqueness: true end
一意制チェックの範囲を限定する:scopeと大文字小文字を区別するcase_sensitiveオプションがある
共通に使えるバリデーションオプション
・ allow_nil
nilの場合にバリデーションをスキップ
class User < ApllicationRecord validates :password, presence: true, length: { minimum: 6 }, allow_nil: true end
・allow_blank
nilだけではなく空文字などの場合にもバリデーションをスキップ
class User < ApllicationRecord validates :age, numericality: { only_integer: true }, allow_blank: true end
・message
バリデーション失敗時にerrorsコレクションに追加されるカスタムメッセージを指定
class User < ApllicationRecord validates :name, length: { maximum: 20, mesaage: "20字以内で入力してください"} end
・on
バリデーションの実行タイミングを指定。デフォルトではレコードの作成時及び更新時
class User < ApllicationRecord validates :email, uniqueness: true, on: :create end