miyohideの日記

技術的なメモなどを記しています

2023年3月25日(土)Railsで日付のカスタムバリデーター

更新

miyohide.hatenadiary.jp

# Railsで日付のカスタムバリデーター

以下のQiitaを参考に。

qiita.com

自分はこんな感じで実装してみた。

# app/validators/date_validator.rb
class DateValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    # 日付フォーマットのチェック
    unless /\A\d{1,4}\-\d{1,2}\-\d{1,2}\Z/ =~ value.to_s
      record.errors[attribute] << I18n.t('errors.messages.invalid_date_format')
    end

    # 日付の妥当性チェック
    begin
      (y, m, d) = value.split('-')
      Time.local(y, m, d, 0, 0, 0)
    rescue
      record.errors[attribute] << I18n.t('errors.messages.invalid_date')
    end
  end
end