2010-09-16 38 views
2

有没有办法编写一个自定义的验证器,根据字段值执行不同的验证?grails domain class validator +根据字段值设置唯一约束?

例如

class myModel{ 

    A a; 
    B b; 
    String prop 
    static belongsTo:[m:myModel] 

    constraints{ 
     prop(validator:{ 
      val,obj-> 
       if (obj.a== null){ 
        unique:[b,prop] 
       } 
       else{ 
        unique:[a,b,prop] 
       } 
     }) 
    } 
} 

我很困惑这个问题。

在此先感谢

+0

我太新来grails回答你的问题,但我确实发现这可能有助于其他堆栈溢出问题。 http://stackoverflow.com/questions/3447612/grails-custom-validation-query-inside-validation-check-what-happens-while-upd – nathan 2010-09-16 15:37:05

回答

3

虽然不是最完美的解决方案,这应该工作:

static constraints = { 
    prop(validator: { val, obj -> 
     if(obj.a == null) { 
      return !myModel.findWhere(b: obj.b, prop: val) 
     } else { 
      return !myModel.findWhere(a: obj.a, b: obj.b, prop: val) 
     } 
    }) 
} 

我不相信有一种方法基于属性值有条件地验证独特性,而无需手动执行查询。

+0

很好的答案。像独特的验证对应于模式生成,因此尝试将条件应用于它们是不可能的。AFAIK。 – proflux 2010-09-16 16:03:13