2012-11-12 66 views
0

我有這些領域:Grails一對多addTo()不起作用?

class ChildPlacementFile{ 
    ..... 
    static hasMany = [children : Client] 
    static belongsTo = [father : Client, mother: Client] 
    Client child 
    ...other fields etc. 
    } 

class Client{ 
String firstName 
String lastName 
....etc etc. 
} 

我的客戶要求我允許的形式保存多。所以我創建了一個類似這樣的服務。

def saveChildren(ChildPlacementFile childPlacementFileInstance, params){ 
    def childrenList = [] 
    def errorList = [] 

    params.rowId = [params.rowId].flatten() 
    params.child = [params.child].flatten() 

    params.rowId.eachWithIndex {child, i -> 
     Client childInstance = Client.get(params.child[i]) 

     if(childInstance){ 
      childrenList.add(childInstance) 
      childPlacementFileInstance?.addToChildren(childInstance).save() 
        }else{ 
      errorList.add(childInstance) 
     } 
    } 

    [errors: errorList, children:childrenList] 

} 

當我嘗試檢查,在控制器上,孩子們似乎被保存在save()方法[childPlacementFileInstance.?children],但是當它重定向到show()方法,將[childPlacementFileInstance 。?孩子]不再出現,它是空的。爲什麼?? O_O

沒有錯誤,沒有例外是如此。所以我期望它能奏效,但事實並非如此。 :(

回答

0

我的猜測是,保存方法上的一些約束失敗。檢查調用保存時childPlacementFileInstance.hasErrors()後 如果你wan't明確異常被拋出調用方法與參數childPlacementFileInstance.save(failOnError: true)

+0

我曾嘗試調用failOnError:true,但它並沒有給我一個錯誤,這是它經歷的一系列方法:save() - > saveChildrenService()兒童似乎被保存 - >在控制器中重定向到show() &兒童沒有出現,它只是空的 – ShootingStar

+0

我對孩子的唯一約束是:children(可爲空:真)我想孩子是可選的 – ShootingStar

+0

我指的是Client對象的約束。也可能失敗,你沒有錯誤呃,所以我不知道。也許發佈您正在執行的完整代碼或將其上傳到某處,以便我可以檢查。 – topr