我为我的网络应用程序的用户添加了生日,并且遇到了我想要的验证问题。这是一个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;。我觉得我很接近,但我不确定从哪里开始。提前谢谢。
答案 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