我有一个像这样的域名三个域类:
Tasks.groovy
class Tasks {
static belongsTo = [ user : User ]
//other fields
Date startDate
Date endDate
}
User.groovy
class User {
//relationships. . . .
static belongsTo = [ company : Company, role : Role, resource : Resource]
static hasMany = [ holidays : Holiday, tasks : Tasks]
//other fields
}
Holiday.groovy
class Holiday {
static belongsTo = User
Date startDate
Date endDate
//other fields
}
现在,当我创建一个Tasks
实例时,我想设置一个约束,使Tasks
startDate
和endDate
不属于User
} Holiday
s startDate
和endDate
。如果它有抛出和错误。
我想要一种方法将此约束放在我的域类本身上(即Tasks
)。
是否可以这样做?
提前致谢。
答案 0 :(得分:2)
您可以使用自定义验证程序完成此操作。
startDate(validator: {val, obj->
obj.user.holidays.every{holiday-> val <= holiday.startDate || val >= holiday.endDate }
})
您可以将自定义验证逻辑封装为闭包。您还必须为endDate添加类似的逻辑。
答案 1 :(得分:0)
我会选择在User域中使用createTask
函数,因为Task不应该摆弄迄今为止删除的变量(self - &gt; User - &gt; Holiday - &gt; startDate)。< / p>
很明显,用户知道假期何时开始和结束,因此可以轻松验证新任务的给定开始和结束日期。