2017-03-20 7 views
0

가격 (BigDecimal)을 취하는 필드가 4 개 있지만 가격 중 하나만 가격을 포함해야합니다. price2에 255.95가 포함되어 있고 다른 누군가가 price1에 가격을 입력하고 싶다면이 코드는 거부해야합니다 (이 경우 price2) 도메인에서 그렇게하려고 시도했으나하지 않았습니다. 나를 위해 일해.불변 필드의 grails 유효성 확인

예 :

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) 

그래서, 무엇을 할 :

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() { 
    } 
} 

나는이 오류가?

+2

부울 조건은 '&&'로 anded됩니다. – doelleri

+0

물론, 저는 대개 DELPHI로 프로그래밍하기 때문에 때로는 명백한 실수를 인식하지 못합니다. 감사! – larand

+0

누군가에게 관심이있을 경우를 대비해 예제를 편집하여 작업 버전을 표시했습니다. – larand

답변

0

마침내 나는 doheli의 도움으로 문제를 해결했다. 최종 솔루션이 포함되도록 질문을 편집했습니다.