需要一些解释来了解Grails的工作原理

时间:2013-12-09 08:48:35

标签: grails

我是Grails的新手,有些事情对我来说仍然含糊不清。

我想创建一个类似Twitter的应用程序。由于用户同时拥有关注者和以下群组,因此我创建了GroupMyTwitter域名。

我不明白,这背后的逻辑是什么。我的GroupMyTwitter域名是这样的:

class GroupMyTwitter
{
    String name;

    static constraints = { name blank : false; }

    static hasMany = [users:UserMyTwitter];
    static belongsTo = [owner:UserMyTwitter];
}

然后,每次创建用户时,我还会创建两个与他关联的组:

GroupMyTwitter followers = new GroupMyTwitter (
    name:"followers",
    owner: user).save(flush: true, failOnError: true)
// And same for followings

现在我只是想知道......我如何访问这些群组以获取关注者/数量,添加或删除一些?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

根据hasManybelongsTo变量,gorm会自动为您创建一些实例字段:

 static hasMany = [users:UserMyTwitter];

这将在users内创建Set类型的字段GroupMyTwitter。 您可以像访问任何其他字段一样访问此Set

followers.users.add(userA)    // add a user
followers.users.remove(userB) // remove a user
followers.users.size()        // number of users

// don't forget to save the group after you modfied the `users` collection:
followers.save(failOnError: true)

根据您的需要,使用List代替Set可能会有用:

class GroupMyTwitter {
   List users
   static hasMany = [users:UserMyTwitter];
   ...
}

这会导致Gorm对List集合使用users而不是Set

List有一个已定义的顺序,允许您按索引访问某些元素:

UserMyTwitter user = followers.users[4] // get the 5th user