2011-02-03 68 views
3

我正在构建一个“最近活动”页面来给出一些背景。基本上这个页面将是用户执行的几个不同动作的混搭。问题是这些数据跨越多个(3个左右)域对象类型,并且都有不同的字段。所有域都与用户对象关联,但关联不同。在Grails中跨多个域对象的查询

这些域是UserPost,FriendRequest和UserTask。有没有办法我可以查询所有这些域名,支持分页和按日期排序创建?改变我的结构会更好吗?任何帮助将是伟大的!

回答

5

我已经为我的网站实现了类似的功能,并得出结论:最好添加一个活动域类来记录所有类型的活动。 假设

class Activity { 
    Date dateCreated 
    String linkClassName 
    Long linkId 

    def getLink() { getClass().classLoader.loadClass(linkClassName).get(linkId) } 
} 

然后,每当你在UserPost插入新记录,FriendRequest和UserTask(或其他),创建与使用afterInsertGORM events如下以及在活动的新条目:

def afterInsert = { 
    new Activity(linkClassName: this.class.name, linkId: this.id).save() 
} 

一旦你做到了这一点,你可以检索你最近的活动是这样的:

def activities = Activity.list(max: 5, sort:'dateCreated', order:'desc') 
+0

我喜欢这个解决方案,我认为它会工作得很好。我可以非常灵活地编写疯狂的查询。谢谢! – RyanLynch 2011-02-03 10:04:51