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)
、何をすべきか?
ブール条件は、 '&& 'でAND演算されます。 – doelleri
もちろん、私は通常DELPHIでプログラミングしているので、私は明らかに誤解を認識しないことがあります。ありがとう! – larand
私は、誰かに興味がある場合に備えて、作業バージョンを表示するためにサンプルを編集しました。 – larand