Ho un problema in cui la mia classe di dominio ha due potenziali chiavi esterne reciprocamente esclusive, un numero di serie o un valore di ricerca legacy.Come posso creare e convalida XOR per due campi in una classe di dominio Grails?
Dal momento che non sono sicuro di quale avrò per una determinata voce, li ho resi nullable e ho aggiunto la convalida personalizzata per provare ad avere un solo e unico valore.
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))
}
}
}
ho creato gli schermi di default CRUD e ha cercato di creare una voce per questa classe di dominio
information: Blah Blah
serialNumber:
legacyLookup: BLAHINDEX123
Questo muore nel validatore con il seguente messaggio:
No such property: serialNumber for class: myproject.Sample
Che cosa sono io mancante?
Questo ha fatto esattamente quello di cui avevo bisogno. Stavo pensando che avevo bisogno di validazione in modo esplicito su entrambi i campi, ma uno gestisce l'altro. Grazie! – GeoGriffin