Мне нужно проверить действие сохранения между 3 доменами, вот отношения:
Пользователь - JobProcess: один ко многим, JobProcess - Тепловая карта: один ко многим.
User { static hasMany = [ jobs : JobProcess ] ... }
JobProcess { static hasMany = [ heatmaps : Heatmap ] ... User script ... }
Heatmap { static belongsTo = JobProcess ... JobProcess job ... }
Я использую исключения для управления потоком проверки, вот мой класс проверки:
class ValidationException extends RuntimeException {
Object invalidObject
ValidationException(String message, Object invalidObject) {
super(message)
this.invalidObject = invalidObject
}
}
Я также строю класс обслуживания для абстрагирования операций Heatmap (и привязки данных params к объекту):
def addJob(params) {
def user = User.findById(params.user_id)
if (user) {
def heatmap = new Heatmap(params)
def process = new JobProcess(params)
process.addToHeatmaps(heatmap)
user.addToJobs(process)
if (user.save()) {
return heatmap
} else {
throw new ValidationException("Invalid form", heatmap )
}
}
}
И мой контроллер:
try {
def heatmap= HeatmapService.addJob(params)
flash.message = "Running new process : $heatmap.job}"
redirect(uri:'/')
} catch (ValidationException che) {
flash.message = "Validation Failed ${che.message}"
render(view:'create', model:[heatmap:che.invalidObject])
}
Моя первая проблема : У меня нет проверки ошибок с помощью: user.save () - почему не выполняется проверка?
Я могу решить эту проблему, покупая обновление if (user.save ()) с помощью: if (heatmap.validate () && user.save ()).
Есть ли лучший способ продолжить?
Моя вторая проблема : мое перенаправление не вызывает исключение недопустимой публикации.
Я перенаправлен в свое представление создания, но все мои поля пусты (я потерял информацию обо всех полях) и нет ошибок проверки.
Тем не менее, я использую модель: [heatmap: che.invalidObject].
За исключением того, что явозвращаю invalidObject, поэтому мое представление создания должно отображать точные ошибки проверки?Что не так?
Спасибо