我有一个域,其中有两个字段可以为null,但不能同时为两个字段。像这样的东西
class Character {
Association association
String otherAssociation
static constraints = {
association (validator: {val, obj-> if (!val && !obj.otherAssociation) return 'league.association.mustbeone'})
otherAssociation (validator: {val, obj-> if (!val && !obj.association) return 'league.association.mustbeone'})
}
}
但是当我运行如下的测试时,我只会失败
void testCreateWithAssociation() {
def assoc = new Association(name:'Fake Association').save()
def assoccha = new Character(association:assoc).save()
assert assoccha
}
void testCreateWithoutAssociation() {
def cha = new Character(otherAssociation:'Fake Association').save()
assert cha
}
我做错了什么?
修改 看起来如果我将我的代码分解成这样的东西:
def assoc = new Association(name:'Fake Association')
assoc.save()
一切正常。但是现在我想知道为什么我不能在其他测试中使用.save()和我这样做。并且它可以工作。
答案 0 :(得分:4)
为了使您的测试通过,您的字段关联和otherAssociation必须为null。向两者添加可空约束,如下所示:
static constraints = {
association nullable: true, validator: {val, obj-> if (!val && !obj.otherAssociation) return 'league.association.mustbeone'}
otherAssociation nullable: true, validator: {val, obj-> if (!val && !obj.association) return 'league.association.mustbeone'}
}
我尝试了它并且有效