#バリデーションを行なう理由
バリデーションは、正しいデータだけをデータベースに保存するために行われます。
#バリデーションヘルパー
##よく見るやつ
###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を指定すればレコードの更新時にのみ検証が行われます。