2017-02-01 7 views
0

Je rencontre des problèmes lors de l'accès à une contrainte unique définie dans un domaine Grails. Here's an example from the official Grails documentation (légèrement modifié pour une contrainte unique):Accéder à une contrainte unique dans Grails via constrainedProperty

class User { 
    String firstName 
    String middleName 

    static constraints = { 
     firstName blank: false, nullable: false 
     middleName unique: true, nullable: true 
    } 
} 

Sur Grails 3.1.9:

Ce code fonctionne: User.constrainedProperties.firstName.blank

Ce code ne fonctionne pas: User.constrainedProperties.middleName.unique

Je reçois cette erreur:

groovy.lang.MissingPropertyException: No such property: unique for class: grails.validation.ConstrainedProperty 

Existe-t-il un moyen de déterminer si cette contrainte est définie, similaire à vérifier si la contrainte "vide" est définie? Merci

MISE À JOUR: Voici ce que je reçois lorsque j'essaie d'utiliser le code suggéré dans les commentaires (différence entre vide et valeur nulle uniquement). hasAppliedConstraint fonctionne bien, mais pas getAppliedConstrait. Je suppose que je fais une erreur stupide quelque part?

Condition not satisfied: 

User.constrainedProperties.middleName.getAppliedConstraint('‌​unique') 
              |       | 
              |       null 
              [[email protected]'middleName'middleNamemap['nullable' -> [[email protected]], 'unique' -> [[email protected]]]] 
+0

Voir https://github.com/grails/grails-core/blob/3fa286c53d674f1e25cce95661b1ae38aa31ca3b/grails-test-suite-uber/src/test/groovy/grails/validation /ValidateableTraitSpec.groovy#L116-L150 –

+0

La façon de procéder dépend de la version de Grails avec laquelle vous travaillez. –

+0

Ah oui, j'aurais dû spécifier ma version Grails est 3.1.9 –

Répondre

0

Voici ce qui a finalement fonctionné pour moi. Pas certain de pourquoi.

User.constrainedProperties.middleName.getAppliedConstraints().find {it.name == 'unique'}.properties.parameter 
0

Votre code fonctionne parce que User.constrainedProperties retours Map avec les touches et les valeurs domainPropertyNameConstrainedProperty. Dans votre cas, vous obtenez ConstrainedProperty de la propriété middleName qui a la méthode getAppliedConstraints() qui renvoie toutes les contraintes appliquées à middleName.

Mieux, vous pouvez:

User.constrainedProperties.middleName.getAppliedConstraint('unique').parameter