I'm aware that it's a bug,但在域类上调用validate()会覆盖之前放入的任何拒绝:
def save = {
def assignment = new Assignment(params)
assignment.errors.reject("assignment.error")
// Save
if (assignment.validate()) {
//rejected error is gone
assignment.save()
redirect action: "list"
}
else {
//render errors
render view: "create", model: [instance: assignment]
}
}
所以,直到这个问题得到修复(它自grails 1.0以来它已经存在并且现在几乎为2.0),是否有任何智能解决方法来保留拒绝并立即使用if validate()然后save()范例?
答案 0 :(得分:3)
这不是一个错误,它是设计的。通过调用validate()
,您要求验证过程重新开始。如果您希望手动reject()
来电包含在错误中,请在调用validate()
后将其置于其中。
答案 1 :(得分:0)
因此,您不仅要避免调用validate(),还必须避免平台在各个点上静默地删除错误。
有时您可以使用 Domain.read(params.id)而不是Domain.get(params.id)来解决这个问题。
在我看来,手动添加错误和grails自动行为之间的关系是非直观的。