2010-09-16 72 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