2012-07-11 70 views
1

我想要做的是找到一個域,然後創建一個新域或保存預先存在的域。下面是我目前使用的代碼(在這個項目中,骨架​​是包名):Grails找到域然後保存它

def save() { 
     Class lob = grailsApplication.getDomainClass('skeleton.'+params.lob.name) 
     def instance = lob.get(params.lob.id) 
     if (instance){ 
      params.data.each { name, value -> 
       if (instance.metaClass.hasProperty(name)){ 
        instance[name] = value 
       } 
      } 
     }else{ 
      instance = new lob() 
      params.data.each { name, value -> 
       if (instance.metaClass.hasProperty(name)){ 
        instance[name] = value 
       } 
      } 
     } 
    } 

這似乎並不奏效。任何人都可以幫我解決這個問題嗎?

+1

ataylor低於爲什麼你的代碼失敗的原因,但你也應該看看'findOrCreateBy'格姆方法,這將讓你幹你的代碼了不少。它要麼返回一個現有的對象,要麼實例化一個新的未保存的對象,你可以在其中填入值。 – 2012-07-11 22:43:47

回答

5

通過getDomainClass返回的對象是GrailsDomainClass一個實例。要獲得您可以撥打get的實際域名,請先撥打getClazz。例如:

Class lob = grailsApplication.getDomainClass('skeleton.'+params.lob.name).clazz 

此外,你就必須調用類對象上newInstance而不是使用new關鍵字來創建一個新的實例。

+0

爲什麼你需要調用'newInstance()'而不是使用'new'? – doelleri 2012-07-11 21:00:45

+1

'new'關鍵字需要一個類型的名字,但在這種情況下它是'Class'對象。 – ataylor 2012-07-11 21:09:41

相關問題