2011-02-03 73 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