2012-04-02 38 views
3

我一直在遇到一個問題幾個小時,並使Google自己沒有任何意義。Mongoid刪除嵌入的文檔不會持續

我有一個Mongoid模型嵌入文檔,就像這樣:

embeds_many :tags, :as => :taggable 

出於某種原因,試圖刪除這個文件出現在控制檯工作,但隨後的文件來重新加載後回來。我試過以下內容:

model.tags.delete_all 

model.tags.each do |tag| 
    tag.delete 
end 

model.tags.destroy_all 

以上所有內容之後,我可以確認model.tags返回一個空數組。爲了安全起見,我甚至打電話給model.save。如果我重新加載模型,所有嵌入的標籤都會返回。

什麼是使用Mongoid刪除嵌入式文檔的正確方法?

+0

哪個版本或Mongoid你何用? – shingara 2012-04-02 07:42:21

回答

7

那麼它很簡單,但棘手......

當你刪除的標籤,您需要重新加載的父對象。

代碼

model.tags.delete_all 
model.reload 

model.tags.each do |tag| 
    tag.delete 
end 
model.reload 

model.tags.destroy_all 
model.reload 

這是方法模型將重新加載,你會得到正確的對象

+0

嘿,有沒有辦法一次刪除多個嵌入式任務而無需重新加載?像部分的destroy_all? – 2017-08-10 13:22:14

+0

我沒有得到您的意見。你可以多給點解釋 – 2017-08-10 14:07:57

+0

是的,對不起,我實際上創建了一個單獨的SO:https://stackoverflow.com/questions/45615471/mongoid-delete-a-subset-of-invalid-embedded-documents-in-one -走 – 2017-08-10 14:41:11