2010-09-16 4 views
2

Existe-t-il un moyen d'écrire un validateur personnalisé qui effectuera différentes validations en fonction des valeurs de champ?grails validateur de classe de domaine + définir une contrainte unique en fonction des valeurs de champ?

Par exemple

class myModel{ 

    A a; 
    B b; 
    String prop 
    static belongsTo:[m:myModel] 

    constraints{ 
     prop(validator:{ 
      val,obj-> 
       if (obj.a== null){ 
        unique:[b,prop] 
       } 
       else{ 
        unique:[a,b,prop] 
       } 
     }) 
    } 
} 

Je suis assez confus à ce sujet.

Merci à l'avance

+0

Je suis trop nouveau pour grails pour répondre à votre question, mais j'ai trouvé cette autre question de débordement de pile qui peut aider. http://stackoverflow.com/questions/3447612/grails-custom-validation-query-inside-validation-check-what-happens-while-upd – nathan

Répondre

3

Alors pas la solution la plus élégante, cela devrait fonctionner:

static constraints = { 
    prop(validator: { val, obj -> 
     if(obj.a == null) { 
      return !myModel.findWhere(b: obj.b, prop: val) 
     } else { 
      return !myModel.findWhere(a: obj.a, b: obj.b, prop: val) 
     } 
    }) 
} 

Je ne crois pas qu'il y ait un moyen de valider certaines conditions d'unicité en fonction des valeurs de propriété sans effectuer manuellement la requête .

+0

Bonne réponse. Aussi les validations telles que les uniques correspondent à la génération du schéma, donc essayer de leur appliquer une condition n'est pas possible AFAIK. – proflux

Questions connexes