Tengo una clase de dominio que necesita tener una fecha posterior al día en que se creó en uno de sus campos.Grails: puedo hacer que un validador se aplique solo para crear (no actualizar/editar)
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)
})
}
}
Así varios días después cuando cambio solamente la cuerda y llamo a salvar falla el proceso de almacenamiento debido a que el validador está volviendo a comprobar la fecha y ahora está en el pasado. ¿Puedo configurar el validador para que se active solo en la creación, o hay alguna forma de que pueda cambiarlo para detectar si estamos creando o editando/actualizando?
@Rob H No estoy del todo seguro de cómo usar su respuesta. Tengo el siguiente código que causa este error:
myInstance.iAmGonnaChangeThisInSeveralDays = "nachos"
myInstance.save()
if(myInstance.hasErrors()){
println "This keeps happening because of the stupid date problem"
}
será nunca el caso de que 'startDate' se actualiza después de la guardar inicial? –
Nunca debe cambiarse. – Mikey