2012-02-18 118 views
0

考慮我有一個Task類是這樣的:有沒有辦法在Grails中做到這一點?

class Task { 
    String title 
    Date assignedOn 
    User user 
} 

現在user可以有很多tasks。現在考慮已有8 tasks已被分配到userX。現在manager(一種特殊的user)正在爲這個userX創建一個2任務,現在我已經完成任務userX。向用戶顯示所有的10 tasks很容易。

但我想是的,我需要一種方法來只顯示2 tasksuserX假設userX已經看到那些8 tasks

現實世界的例子是Stackoverflow網站本身。如果該人回答我的問題,我會收到一條通知,說明1 new answer on the q.....,我會查看它。過了一段時間,如果有人回答我的同一問題,我收到一個通知,說明1 new answer不是2 new answer,因爲我已經查看了第一個答案。

我可以用什麼方式來做到這一點?在grails中可用的任何插件?

在此先感謝。

回答

2

原則,我會在任務類添加一個布爾標誌指示是否已經看過或未用戶像這樣:

class Task { 
    String title 
    Date dateAssigned 
    boolean viewStatus // true indicates a read task 

    static belongsTo = [assignedTo: User, assignedBy: User] 
} 

在創建viewStatus標誌將被設置爲false的任務。每當用戶查看特定任務時,viewStatus標誌將由您的程序設置爲true。因此,可以查詢只是未讀的任務,像這樣顯示給用戶(使用GORM):

def currentUser = // your currently logged in user 
Task.findTaskByViewStatusAndAssignedTo(false, currentUser) 

查詢將返回唯一還沒有被閱讀用戶的任何用戶的任務,假設只要用戶讀取任務,就可以正確設置readStatus。

1

這與插件無關,而是您設計的Task類。不知道更多關於你的要求,你可以做這樣的事情:

class Task { 
    String title 
    Date assignedOn 
    User user 
    Boolean isAssignedByManager 
} 

我加User user因爲你需要能夠分辨出誰的任務被分配到(不知道你是如何在這樣做時刻)。然後,只需設置isAssignedByManagertrue當經理被分配任務,這樣你就可以在以後搜索:

Task.findByUserAndIsAssignedByManager(userInstance, true) 
+0

對不起,我沒有顯示整個班級文件。我錯過了'User user'行。 – 2012-02-18 10:09:47

+0

那麼'tasks'只能由'manager'分配。所以使用'Boolean isAssignedByManager'行是沒有意義的。 – 2012-02-18 10:11:47

+1

你怎麼知道用戶已經看到了8個任務?也許你需要一個'Boolean isSeen',並在用戶看到它時將其設置爲true。那麼你可以通過搜索'Task.findByIsSeen(false)' – zoran119 2012-02-18 10:15:08

相關問題