1

いずれかが null になる可能性があるが、同時に両方が可能ではない 2 つのフィールドがあるドメインがあります。だから、このようなもの

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() を含めることができない理由を知りたいのですが、それは機能します。

4

1 に答える 1

4

テストに合格するには、フィールドの association と otherAssociation を null にする必要があります。次のように、両方に 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'}
}

私はそれを試してみましたが、うまくいきます

于 2013-05-09T14:24:14.227 に答える