验证hasMany未保存对象的关系

时间:2014-01-22 19:59:03

标签: validation grails constraints grails-domain-class

在Grails 2.3.4应用程序中,我有一个表示作者和文章之间关系的域类。它包含三个属性:

  • type id(代表author(1),viewer(3)和其他类型)
  • 构件
  • 制品

-

class Article {
  static hasMany = [ relations: ArticleRelation ]

  string title
}

class ArticleRelation {
  static belongsTo = [ article: Article ]

  int    type
  Member member
}

某些类型在语义上不允许创建多对类型+作者。例如:

  • 每篇文章只允许一位作者

其他类型+作者没有这个限制。例如:viewer。

条件已添加到ArticleRelation以防止重复这样的内容:

static constraints = {
  article validator: { val, obj ->
    if ((obj.type == 1) || (obj.type == 2)) {
      if (ArticleRelation.countByArticleAndType(val, obj.type) > 0) return ['myNotUniqueErrorKey']
    }
  }
}

但是,在Grails 2.3中,此验证不会阻止向文章关系添加重复项:

def article = new Article(title: "Man on the Moon")
article.addToRelations(new ArticleRelation(type:1, member:me))
article.addToRelations(new ArticleRelation(type:1, member:you))

article.validate()

验证不会像我预期的那样失败。我认为这是因为对象尚未保存。

应该以某种方式在文章中实施验证吗?如果是这样,怎么样?

0 个答案:

没有答案