個人的勉強メモ置き場

プログラミングど素人のメモ置き場

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_longwrong_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


参考
railsguides.jp