Supposons que j'ai une classe de domaine branch
qui a plusieurs membres:Grails: champs dérivés dans les classes de domaine
…
static hasMany = [ members:Member ];
…
Supposons maintenant que je veux avoir le nombre de membres de cette branche facilement disponibles, pour l'afficher en les actions list
et view
, donc peut-être stocker cette information dans une variable dans la classe de domaine elle-même serait une bonne idée?
…
Integer memberCount = members.size();
static constraints = {
memberCount(editable:false);
}
…
(Est-ce la syntaxe correcte?)Modifier: Ce n'est pas la syntaxe correcte. Je ne peux pas évaluer la taille de la liste des membres, car elle n'existe pas encore et les grails se plaindront que size() ne s'applique pas aux objets nuls. Quoi d'autre pourrais-je essayer?
Cependant, comme memberCount
est maintenant une variable dans la classe de domaine, il est possible d'attribuer une valeur à elle lors de la création du Branch
(qui est contre-intuitive) et il ne sera pas mis à jour automatiquement lorsqu'une nouvelle Member
est ajoutée.
Il est bien sûr possible d'atteindre le résultat souhaité d'une manière différente. Je pouvais manipuler le view.gsp
et list.gsp
dans le répertoire /Branch
, ajouter quelques <td>
supplémentaires là-bas, etc. Mais cela ne me semble pas très élégant.
Fondamentalement, je pense que ce que je cherche est un moyen de dire Grails qu'une certaine variable est dérivé, ne devrait pas être setable par l'utilisateur, mais la mise à jour chaque fois que nécessaire. Y a-t-il un tel moyen?
Si la propriété 'memberCount' figure dans les listes' transients', elle ne sera pas stockée correctement dans la base de données. Mais va-t-il se mettre à jour une fois qu'un nouveau membre sera ajouté? Il me semble que je devrai utiliser la propriété dérivée de GORM que vous avez liée. – mzuba