gpt4 book ai didi

ruby-on-rails - Mongoid : Embedded documents are saved under the wrong parent

转载 作者:可可西里 更新时间:2023-11-01 10:43:39 24 4
gpt4 key购买 nike

当保存具有 3 层嵌套的文档时,子对象保存在错误的父对象下:

user = User.create
website = user.websites.create
post = website.posts.create
post2 = website.posts.create

post.images.create
post2.images.create

puts "#{user.to_json}"
puts "#{user.reload.to_json}"

每个帖子都应该有一张图片,在脏用户对象 (user.to_json) 上也是如此=> https://gist.github.com/vdaubry/cdc465d6d5ef84576830

但是当我重新加载用户时,所有图像都嵌入到第一篇文章中 (user.reload.to_json)=> https://gist.github.com/vdaubry/a9c217a467dd9ff9a7fb

这是一个错误还是我遗漏了一些明显的东西?

下面是用于重现这个的类定义:

class User
include Mongoid::Document
embeds_many :websites
end

class Website
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :user
embeds_many :posts

end

class Post
include Mongoid::Document
include Mongoid::Timestamps

embedded_in :website
embeds_many :images
end
class Image
include Mongoid::Document
include Mongoid::Timestamps
embedded_in :post
end

我的 gem 文件:

ruby 2.1.2p95
gem 'rails', '~> 4.1.4'
gem 'mongoid', '~> 4.0.0'

最佳答案

这是一个错误,我不确定错误存在于哪一端,Mongoid 或 MongoDB。这是因为 Mongoid 用位置运算符“$”替换了我们要推送到的字段的键中的索引,即将“websites.0.posts.1.images”更改为“websites.0.posts.$”。图片”。

引用关于位置运算符的文档(斜体是我的):

When used with the update() method,

  • the positional $ operator acts as a placeholder for the first element that matches the query document,

在您的情况下,图像文档被插入到创建的第一个 post 文档中,所以这可能是原因。

我不确定为什么 Mongoid 会这样做(用位置运算符代替)或者 $push 操作是否有必要。

我看到你已经为他们创建了一个问题,所以我也将我的评论复制到那里。

关于ruby-on-rails - Mongoid : Embedded documents are saved under the wrong parent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com