Grails:如何跨其他域“访问”域类实例变量?

时间:2014-01-15 17:49:34

标签: grails

抱歉,我无法为这个问题找到更好的头衔,但是我的表现最好。我有域类UserPost - user有很多postspost属于用户,如下所示。

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 = {
    }
}

每个userpost都有status,我想知道如何实现这一点?我能想到的几种不同的方法是:

  1. 继承:让UserPost扩展Status,并在static mapping = { tablePerHierarchy false }中使用Status。然后UserPost会自动继承Status的实例变量(并且它们会在单独的表中保留)。但是,这种方法似乎不合适,因为UserPost实际上并不是Status
  2. 我可以在StatusUser中重新定义Post个实例变量,然后在UserPost
  3. 中执行类似的操作
    
        static constraints = {
            importFrom Status
    
            // other constraints 
        }
    
    

    的问题:

    • 一种方法比另一种更好吗?
    • 有没有更好的方法来实现这个目标?
    • 是否有Grails专业人士推荐的最佳做法?

    注意:Status域有许多实例变量(这里显示的是一个精简版本),我需要从许多其他域“{访问”它的实例变量User,{ {1}},以及许多其他)。否则,我可能刚刚开始使用Post域,只需在StatusUser中分别定义这些实例变量。上面提到的方法2可以做到这一点,只是它通过使用Post来保存重新键入约束。

1 个答案:

答案 0 :(得分:1)

我同意继承不是一个干净的选择。你的第二种方法似乎是正确的,但为什么你需要“importFrom”?通过将Status定义为User和Post中的实例变量,Status将负责其自身变量的验证。您仍然可以从Post / User访问Status'实例变量,如下所示:

user.status.isActive