いずれかのフィールドで作成された日の翌日を指定する必要があるドメインクラスがあります。
class myClass {
Date startDate
String iAmGonnaChangeThisInSeveralDays
static constraints = {
iAmGonnaChangeThisInSeveralDays(nullable:true)
startDate(validator:{
def now = new Date()
def roundedDay = DateUtils.round(now, Calendar.DATE)
def checkAgainst
if(roundedDay>now){
Calendar cal = Calendar.getInstance();
cal.setTime(roundedDay);
cal.add(Calendar.DAY_OF_YEAR, -1); // <--
checkAgainst = cal.getTime();
}
else checkAgainst = roundedDay
return (it >= checkAgainst)
})
}
}
したがって、数日後、文字列のみを変更してsaveを呼び出すと、バリデーターが日付を再チェックしていて、現在は過去であるため、保存が失敗します。バリデーターを作成時にのみ起動するように設定できますか、それとも作成中か編集/更新中かを検出するようにバリデーターを変更する方法はありますか?
@RobHあなたの答えの使い方がよくわかりません。このエラーの原因となる次のコードがあります。
myInstance.iAmGonnaChangeThisInSeveralDays = "nachos"
myInstance.save()
if(myInstance.hasErrors()){
println "This keeps happening because of the stupid date problem"
}