假设我有一个域类branch
,它有几个成员:
…
static hasMany = [ members:Member ];
…
现在假设我希望该分支的成员数量随时可用,以便将其显示在list
和view
操作中,因此可能将该信息存储到域类中的变量中本身会是一个好主意吗?
…
Integer memberCount = members.size();
static constraints = {
memberCount(editable:false);
}
…
(这是正确的语法吗?) 编辑:这不是正确的语法。我无法评估成员列表的大小,因为它尚不存在,而且grails会抱怨size()不适用于null对象。我还能尝试什么?
但是,由于memberCount
现在是域类中的变量,因此可以在创建Branch
时为其分配值(这是违反直觉的)并且它不会是添加新的Member
后会自动更新。
当然可以以不同的方式达到预期的结果。我可以操纵view.gsp
目录中的list.gsp
和/Branch
,在那里添加一些<td>
等等。但这对我来说似乎并不优雅。
基本上,我认为我正在寻找的是告诉grails某个变量是 派生 的某种方式,不应该被用户选择,而是每当更新必要。有这样的方式吗?
答案 0 :(得分:2)
您可以将任何不想保留的属性添加到transients
静态列表中:
static transients = ['memberCount']
此外,this StackOverflow question answers the same question
此外,更好的方法来执行派生属性可能是使用Derived Properties feature of GORM