窓際BLOG

プログラミングの学習メモや書籍の感想等を公開していきます。

Ruby on Rails:モデルに独自のバリデーションを実装する

Railsはvalidationを使って必須等の色々なデータの制約を付与することが出来ますが、それらに該当しない独自のvalidationを付与する方法をメモφ(..)

手順

テーマ:生年月日の過去日を不可にする

今回は、生年月日に過去日が入力された際にエラーとなるように独自のvalidationを追加していきます。

f:id:madogiwa0124:20171224162947p:plain

前提条件

生年月日はUserモデルに属し、データ構造は下記となっていることを想定します。

論理名 物理名
生年月日 birthday date

独自のバリデーションを実装する

独自のバリデーションを追加するのは意外と簡単でした!Userモデルにメソッドを定義し、それをvalidateで設定するだけです:D

class User < ApplicationRecord

  # 省略

  # validateに定義したメソッドを設定
  validate :birthday_cannot_be_in_the_future
  
  # 生年月日の未来日のチェックメソッド
  def birthday_cannot_be_in_the_future
    # 生年月日が入力済かつ未来日(現在日付より未来)
    if birthday.present? && birthday > Date.today
      # エラー対象とするプロパティ(birthday)とエラーメッセージを設定
      errors.add(:birthday, "can not specify your future date as your birth date.")
    end
  end

end

参考

railsguides.jp

以上