search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

Organization

Railsのカスタムバリデーション(ActiveModel::EachValidator)

はじめに

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0