2016-05-13 7 views
1

ich diese Domain haben:Wie neue Überprüfung für ein Feld Domäne anzuwenden auf Grails

class Foo { 
    static hasMany=[ 
    bars: Bar 
    ] 

    String name 

    static constraints = { 
    name(blank: false, unique: true) 
    } 
} 

nach Werten in die Datenbank eingefügt habe ich eine weitere Validierung für Bars

bars(nullable: false, validator: {value, object -> 
      if(value.isEmpty()){ 
       return['bars.empty.validation.error'] 
      } 
     }) 

jetzt, wenn ich versuche, Update Foo Instanzen, die ohne Striche gespeichert wurden sparen, ist auf dem Feld beschweren bars:

Field error in object 'Foo' on field 'bars': rejected value [[Bar : (unsaved)]] 

Meine Frage ist, wie ich Foo Instanzen ohne bars

+0

Ja ist es. Denn wenn Sie versuchen, die Foo-Instanz zu aktualisieren, ist sie nicht mehr gültig, weil Sie die Einschränkung (Anforderung) hinzugefügt haben, dass sie Bars haben muss. Dies ist das erwartete Verhalten für das, was Sie getan haben. –

Antwort

3

aktualisieren können Sie Ihre benutzerdefinierten Validierung gelten nur für Instanzen ändern könnte, die mit ihnen verbunden sind keine id haben (was sie eingesetzt werden und nicht aktualisiert). Wie dieses:

bars(nullable: false, validator: {value, object -> 
    if (object?.id) return // don't apply to previously saved instance. 
    if(value.isEmpty()){ 
    return['bars.empty.validation.error'] 
    } 
}) 
+1

Dies würde Ihnen jedoch erlauben, später die Balken eines Foo zu löschen, die beim ersten Speichern Balken haben mussten. – billjamesdev