【Rails】カスタムバリデーションを設定する

環境

Windows 8.1(けっこうつらい)

Ruby 2.3.1

Rails 5.0.0

動機

「xxxを入力してください」というエラーメッセージが切ない。
UXを向上させるため、人間味のあるエラーメッセージを設定したい。

どうするのか

こんな感じのバリデーションを設定していたとします。

class User < ApplicationRecord
  validates :name,
             presence: true
  validates :age,
             presence: true,
             numericality { only_integer: true, greater_than_or_equal_to: 0 }
end

カスタムバリデーションを行うメソッドを追加します

class User < ApplicationRecord
  validates :name,
             presence: true
  #validates :age,
  #           presence: true,
  #           numericality { only_integer: true, greater_than_or_equal_to: 0 }
  
  # カスタムバリデーションを設定
  validate  :validate_age

  # カスタムバリデーションを定義
  def validate_age
    @errors[:age] = "年齢には0以上の数字を入力してください" if age < 0
  end
end

実際にはこんな感じになります。
https://github.com/tarunama/rails-exam/pull/2/files