我需要验证3个域之间的保存操作,这里是关系:
用户-作业流程:一对多,作业流程-热处理:一对多。
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(heatmap.validate()&&user.save())修复此问题购买更新if(user.save())。
有没有更好的方法?
我的第二期
:我的重定向未触发无效的post异常。
我被重定向到我的创建视图,但是我的所有字段都是空白的(我丢失了所有字段信息),没有验证错误。
不过,我使用的是模型:【heatmap:che.invalidobject】。
除此之外,我正在传递InvalidObject,所以我的创建视图应该显示确切的验证错误?怎么了?
谢谢