Ich habe ein Problem, bei dem meine Domain-Klasse zwei potentiell einander ausschließende externe Schlüssel hat, entweder eine Seriennummer oder einen Legacy-Lookup-Wert.Wie erstelle ich eine XOR-Validierung für zwei Felder in einer Grails-Domänenklasse?
Da ich nicht sicher bin, welche ich für einen bestimmten Eintrag haben werde, habe ich sie beide Nullable und benutzerdefinierte Validierung hinzugefügt, um sicherzustellen, dass ich einen einzigen Wert habe.
package myproject
class Sample {
String information
String legacyLookup
String serialNumber
static constraints = {
information(nullable: true)
legacyLookup(nullable: true)
serialNumber(nullable: true)
legacyLookup validator: {
return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
}
serialNumber validator: {
return ((serialNumber != null && legacyLookup == null) || (serialNumber == null && legacyLookup != null))
}
}
}
Ich habe den Standard CRUD Bildschirme und versuchte, einen Eintrag für diese Domain-Klasse
information: Blah Blah
serialNumber:
legacyLookup: BLAHINDEX123
Dieser stirbt in dem Validator mit der folgenden Meldung zu erstellen:
No such property: serialNumber for class: myproject.Sample
Was ich bin fehlt?
Das tat genau das, was ich brauchte. Ich dachte, dass ich die Validierung für beide Felder explizit benötige, aber die eine behandelt die andere. Vielen Dank! – GeoGriffin