【问题标题】:Mongoid deleting embedded documents does not persistMongoid 删除嵌入文档不会持续存在
【发布时间】:2012-04-02 06:59:48
【问题描述】:

我已经遇到一个问题好几个小时了,用谷歌搜索自己毫无意义。

我有一个带有嵌入式文档的 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 删除嵌入文档的正确方法是什么?

【问题讨论】:

  • 你用的是哪个版本或Mongoid?

标签: ruby-on-rails mongodb mongoid


【解决方案1】:

嗯,它非常简单但很棘手......

当你删除标签时,你需要重新加载父对象。

代码

model.tags.delete_all
model.reload

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

model.tags.destroy_all
model.reload

这是你的模型将被重新加载的方式,你会得到正确的对象

【讨论】:

  • 嘿,有没有办法一次性删除多个嵌入任务而无需重新加载?像部分 destroy_all ?
  • 我没有得到你的 cmets 。能多解释一下吗
  • 是的,抱歉,我实际上为此创建了一个单独的 SO:stackoverflow.com/questions/45615471/…
猜你喜欢
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
相关资源
最近更新 更多