2012-04-02 70 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