概要
モデルの検証を行うバリデーターを自作するのにいくつかの方法がある。
- バリデーションメソッドをモデルで定義
- ActiveModel::Validatorのサブクラスを定義
- ActiveModel::EachValidatorのサブクラスを定義
バリデーションメソッド
検証したいモデルの中でカスタムメソッドを定義し、validate
(単数形)でメソッドを呼び出す。
以下のコードは、:name属性と:email属性を持つUserモデルをカスタムメソッドにより検証する例。
1 2 3 4 5 6 7 8 |
class User < ApplicationRecord validate :name_or_email_presents def name_or_email_presents message = "Either name or email must present" errors.add(:name, message) unless name.present? || email.present? end end |
- カスタムメソッド
name_or_email_presents
を定義 - メソッドでは、
:name
と:email
の両方とも空の場合にエラーを追加 - モデルで
validate
によってメソッドをコールバックとして追加(validate
は単数形)
ActiveModel::Validator
ActiveModel::EachValidator