在Grails 2.3.4应用程序中,我有一个表示作者和文章之间关系的域类。它包含三个属性:
-
class Article {
static hasMany = [ relations: ArticleRelation ]
string title
}
class ArticleRelation {
static belongsTo = [ article: Article ]
int type
Member member
}
某些类型在语义上不允许创建多对类型+作者。例如:
其他类型+作者没有这个限制。例如:viewer。
我在域类中寻找一种验证方法,可以根据类型的值保证类型+作者对的唯一性。
类似的东西:
static constraints = {
member unique: if (type == 1 || type == 2)
}
是否可以在Grails域类中编写这样的约束?
- 编辑 -
事实上,我发现条件需要以不同的方式编写:类型+文章需要是唯一的对才能正确描述包含。
因此ArticleRelation中的约束将是
static constraints = {
article validator: { val, obj ->
if ((obj.type == 1) || (obj.type == 2)) {
if (ArticleRelation.countByArticleAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
}
}
}
答案 0 :(得分:0)
您需要为此编写自己的自定义验证程序实现。幸运的是,Grails提供了一种方法。用于验证的documentation显示了一些基本实现,最后一个最适用于您的情况,因为您需要引用该实例的其他属性。
你的实现可能看起来像这样(只是在我的头顶):
static constraints = {
member validator: { val, obj ->
if ((obj.type == 1) || (obj.type == 2)) {
if (ArticleRelation.countByMemberAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
}
}
}