有没有办法在Grails中这样做?

时间:2012-02-18 09:40:21

标签: grails groovy

考虑我有一个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中有哪些可用的插件?

提前致谢。

2 个答案:

答案 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)