2012-02-18 109 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

相关问题