rails应用程序中用户的生日字段验证

时间:2018-04-17 23:44:06

标签: ruby-on-rails validation datetime

我为我的网络应用程序的用户添加了生日,并且遇到了我想要的验证问题。这是一个boyscout管理应用程序,我希望注册的年龄在12-18之间的球探,但由于生日是一个新的添加,已经有我的数据库中没有生日的球探。因此,我想做before_create :validate_birthday之类的事情,但我不知道如何编写验证函数。我相信它会像

def validate_birthday
  if self.has_role?(:scout)
    if !self.has_valid_dob?
      errors.add(:birthday, "invalid. Must be 12-18 years of age")
    end
  else
    if self.birthday.to_date != "06/06/1944".to_date
      self.birthday = "06/06/1944".to_date
    end
  end
end

def has_valid_dob?
  self.birthday.to_date > (18.years.ago).to_date && self.birthday < (12.years.ago).to_date
end

现在运行此命令不会引发错误,但错误消息不会显示&#34;生日无效。必须是12-18岁&#34;。我觉得我很接近,但我不确定从哪里开始。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Proc

class User < ApplicationRecord
  validate :valid_age, if: proc { |u| u.birthdate.present? }

  protected

  def valid_age
    return if valid_date_range.include?(birthdate)
    errors.add(:birthdate, 'invalid. Must be 12-18 years of age')
  end

  def valid_date_range
    maximum_date..minimum_date
  end

  def minimum_date
    12.years.ago.to_date
  end

  def maximum_date
    18.years.ago.to_date
  end
end