2012-05-15 50 views
0

我有一個grails應用程序,其中我有屬於另一個域contactGroup的聯繫人。除了removeFromContacts方法,它似乎都工作正常。我正在使用以下代碼。代碼正常工作,但一次只從組中移除一個聯繫人。我甚至做了一些調試,並且foreach循環運行的次數與提供的聯繫人一樣多。沒有錯誤消息。任何想法可能是想錯了 -grails removeFrom一次只刪除一個

ContactGroup group = ContactGroup.findByIdAndOwner(params.groupId, user) 

    def contactIds = request.JSON.data.contact 
    contactIds.each { 
     Contact contact = Contact.findByContactIdAndOwner(it.contactId, user) 
     if(contact) { 
      group.removeFromContacts(contact) 
     } 
    } 
+0

你是否檢查'if'循環中的代碼是否正在執行,如果其中有數據? –

+0

我假設這是包含在一個控制器動作,應該從給定的'ContactGroup'中刪除所有提供的'Contacts'。但是,每次調用控制器操作時,您的代碼只能刪除一個(大概是第一個)。如果我正確地理解了這個問題,我會在從組中刪除每一個後立即添加一個'group.save(flush:true failOnError:true)'。 –

+0

@JarredOlson你的假設是正確的。它在控制器動作中,代碼只是刪除第一個。我不認爲group.save是必需的或將有所作爲。根據Grails doc,addTo和removeFrom方法不需要save方法。它們被自動保存。儘管如此,我也嘗試過,結果仍然一樣。只有第一個被刪除... – saurabh

回答

0

感謝您的支持。我意識到我沒有正確定義域的關係,並且搞亂了整個事情。當我糾正它正常工作。

saurabh

0

我讀過有關的findAll方法加載代理的幾件事情,如果協會是延遲加載,而不是「真實」的實例。

試試這個:

group.removeFromContacts(Contact.get(contact.id)) 

的「得到」應該繞過代理,並使用「真實」的實例。有一個談論這個的JIRA(Grails-5804)。根據JIRA(來自Burt Beckwith)的整體修正是在Contact類中實現equals和hashCode方法。

+0

我想如果這是一個問題在這裏,它不會只爲第一個和其他人失敗。儘管如此,我也嘗試過,但結果仍然相同。 – saurabh