我正在尝试将dateOfBirth
注册为至少13岁。我不希望在我的User类上有age
字段,我只想坚持使用dateOfBirth
。
如何将验证包括在13年中,减去闰年。
目前在我的约束中我正在使用这一行:
dateOfBirth blank: false, max: (new Date() - 13*365)
我不想使用自定义验证,因为我相信必须有一种没有它的方法。我尝试了以下内容:
dateOfBirth blank: false, use(TimeCategory) { max: new Date() - 13.year }
use(TimeCategory)
部分(我相信)我也试过使用魔术数字插件无济于事。我试过了:
dateOfBirth blank: false, max: 13.years.ago
和
dateOfBirth blank: false, max: 13.years.ago.toDate()
并导入com.metasieve.magicnumbers.*
包。
答案 0 :(得分:2)
自定义验证器有什么问题?我相信这是一个很好的例子,自定义验证器是正确的选择。
import groovy.time.TimeCategory
dateOfBirth validator: {
use (TimeCategory) {
it?.before(13.years.ago)
}
}
答案 1 :(得分:0)
你的第一次尝试(虽然不精确)这一事实让我相信这会起作用:
dateOfBirth blank: false, max: ((new Date()).toCalendar().add( -13, Calendar.YEAR )).getTime()
虽然我会检查这实际上并没有编译到单个日期,但每次检查约束时都会重新计算。