Grails:如何;“访问”;跨其他域的域类实例变量?
对不起,我想不出一个更好的题目来回答这个问题,但我尽力了。我有域类Grails:如何;“访问”;跨其他域的域类实例变量?,grails,Grails,对不起,我想不出一个更好的题目来回答这个问题,但我尽力了。我有域类User和Post——一个User有许多Post,一个Post属于一个用户,如下所示 class User { String name static hasMany = [ posts : Post ] static constraints = { } } class Post { String content static belongsTo = [ user : User
User
和Post
——一个User
有许多Post
,一个Post
属于一个用户,如下所示
class User {
String name
static hasMany = [ posts : Post ]
static constraints = { }
}
class Post {
String content
static belongsTo = [ user : User ]
static constraints = { }
}
我有另一个域类Status
,如下所示
class Status {
Boolean isActive
static constraints = {
}
}
每个用户
和post
都有一个状态
,我想知道如何实现它?我可以想到的两种不同方法是:
User
和Post
扩展Status
,并在状态中使用静态映射={tablePerHierarchy false}
。然后User
和Post
自动继承Status
的实例变量(并将它们保存在单独的表中)。但是,这种方法似乎不合适,因为用户
和发布
实际上不是状态
User
和Post
中重新定义Status
实例变量,然后在User
和Post
中执行类似操作- 一种方法比另一种好吗
- 有没有更好的方法来实现这一点
- 是否有Grails专业人士可以推荐的最佳实践
注意:
Status
域有许多实例变量(这里介绍的是一个精简版本),我需要从许多其他域(“code>User,Post
和许多其他域”)中“访问”它的实例变量。否则,我可以直接进入状态
域,然后分别在User
和Post
中定义这些实例变量。上面提到的方法2可以做到这一点,除了它通过只使用importfromstatus
来避免重新键入约束之外,我同意继承不是一个干净的选项。你的第二种方法似乎是正确的,但为什么你需要“导入源”?通过在User和Post中将Status定义为实例变量,Status将负责验证自己的变量。您仍然可以从Post/User访问Status的实例变量,如下所示:
user.status.isActive
谢谢你,拉米。实际上,我的意思是在
User
和Post
中都包含Boolean isActive
而不是Status
。在这种情况下,我需要从状态导入来处理约束。但我想我明白你的意思。尽管如此,如果我在User
和Post
中声明了Status Status
,并且执行def User=new User(name:“我的名字”,Status:new Status(isActive:true))
和User.save(failOnError:true,flush:true)
,代码仍然无法对“Status\u ID”列说出类似NULL的语句!所以我肯定错过了一些东西。如有任何澄清,将不胜感激!好的,我想我明白了。在保存用户之前,我必须显式地保存状态status.save(failOnError:true,flush:true)
,然后才能保存用户user.save(failOnError:true,flush:true)
。非常感谢。令人惊叹的!另外,如果您是Grails新手,那么我建议您阅读一些关于关系中的级联和所有权的内容。很高兴我能帮上忙。事实上,是的,我是一个新手,一直在关注《圣杯行动》MEAP,第二版Edn,还有一些地方。不过,如果您有任何具体的参考,我很想知道。非常感谢。除了官方文档之外,Grails in Action是我最好的参考资料。订阅grailsdev邮件列表也非常有用。
user.status.isActive