はじめに
ActiveModel::EachValidatorを使うことで、独自のバリデーションを追加することができます。
フォルダ作成
まず、app/validatorsフォルダを作成します。
このvalidatorsフォルダに独自のバリデーションを追加していきます。
バリデーション作成
例えば、カラーコードかどうかを判定したい場合に、
app/validatorsフォルダにcolor_validator.rbのファイルを作成し、下記の内容を記載します。
class ColorValidator < ActiveModel::EachValidator
PATTERN = /カラーコードかどうか判定するための正規表現を記載/.freeze
def validate_each(record, attribute, value)
unless value =~ PATTERN
record.errors.add(attribute, "はカラーコードでなければいけません。")
end
end
end
この様にすることで、値がカラーコードで無い場合にエラーを出すカスタムバリデーションを作成できました。
使い方
使い方としては対象のモデルに対して
validates :color_code, color: true
の様にcolor_codeカラムにカラーコード以外の値が保存されるときにエラーを出す様にすることができます。