2017-03-20 4 views
0

私は価格(BigDecimal)を取る4つのフィールドを持っていますが、そのうちの1つだけが価格を含むべきです。 price2に255.95が含まれていて、誰かがprice1に価格を入力したいのであれば、それでもう一方を掃除しなければならないというメッセージでこれを拒否する(この場合はprice2) 私はドメインでそれを試みたが、私のために働く。不変フィールドのgrails検証

例:

class Author { 
    def String name 
    def String email 
    def BigDecimal price1 
    def BigDecimal price2 
    def BigDecimal price3 
// static hasMany = [books: Book] 

    static constraints = { 
     name nullable:true 
     email nullable:true 
     price1(nullable:true, 
      validator: { val, obj -> 
       (obj.price2==null) and (obj.price3 == null) }) 
     price2(nullable:true, 
      validator: { val, obj -> 
       (obj.price1==null) and (obj.price3 == null) }) 
     price3(nullable:true, 
      validator: { val, obj -> 
       (obj.price1==null) and (obj.price2 == null) }) 
    } 
    static mapping = { 
     name column: "AuthorName", sqltype:"char", length:25 
    } 
    String toString() { 
     return name 
    } 
    def beforeValidate() { 
    } 
} 

私はこのエラーを取得する:だから

groovy.lang.MissingMethodException: No signature of method: masterdetail.Author.and() is applicable for argument types: (java.lang.Boolean) values: [true] 
Possible solutions: any(), any(groovy.lang.Closure), find(), find(groovy.lang.Closure), find(java.lang.String), find(masterdetail.Author) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58) 
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) 
    at masterdetail.Author$__clinit__closure1$_closure3.doCall(Author.groovy:16) 

、何をすべきか?

+2

ブール条件は、 '&& 'でAND演算されます。 – doelleri

+0

もちろん、私は通常DELPHIでプログラミングしているので、私は明らかに誤解を認識しないことがあります。ありがとう! – larand

+0

私は、誰かに興味がある場合に備えて、作業バージョンを表示するためにサンプルを編集しました。 – larand

答えて

0

最後に、私はdoelleriの助けを借りて問題を解決しました。 最終的な解決策が含まれるように質問を編集しました。

関連する問題