0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby on Railsを学び直すAdvent Calendar 2020

Day 6

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

Last updated at Posted at 2020-12-06

はじめに

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

0
0
0

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
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?