考虑我有一个Task
类,如下所示:
class Task {
String title
Date assignedOn
User user
}
现在user
可以有多个tasks
。现在考虑已经为tasks
分配了8个userX
。现在,manager
(一种特殊的user
)正在为userX
创建2个任务,现在我完全10
userX
个任务。很容易向该用户显示所有10 tasks
。
但我想要的是,假设tasks
已经查看了那些userX
,我需要一种只向userX
显示2 tasks
的方法。
现实世界的例子是Stackoverflow网站本身。如果此人正在回答我的问题,我会收到一条通知,说明1 new answer on the q.....
,我会查看。过了一段时间,如果有人回答我同一个问题,我会收到一条通知,说明1 new answer
而不是2 new answer
,因为我已经查看了第一个答案。
我可以使用哪些方法来执行此操作? grails中有哪些可用的插件?
提前致谢。
答案 0 :(得分:2)
原则上,我会在Task类上添加一个布尔标志,以指示用户是否已经查看过它,如下所示:
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 :(得分:1)
这与插件无关,而是与Task
类的设计无关。如果不了解您的要求,您可以这样做:
class Task {
String title
Date assignedOn
User user
Boolean isAssignedByManager
}
我添加了User user
,因为您需要能够分辨谁分配了任务(目前不知道您是如何做到这一点的)。然后,只需在经理分配任务时将isAssignedByManager
设置为true
,以便稍后进行搜索:
Task.findByUserAndIsAssignedByManager(userInstance, true)