はじめに
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
カラムにカラーコード以外の値が保存されるときにエラーを出す様にすることができます。