我对这个问题慢慢变得疯狂。我很确定它是微不足道的,我误解了一些东西,因为我刚刚开始使用Mongoid(以及Ruby on Rails)。
我的模型如下:
class Drawing
include Mongoid::Document
field :image_uid
image_accessor :image
field :date_created, type: Time, default: Time.now
recursively_embeds_many
embedded_in :user
embedded_in :painting_template, class_name: 'Painting', inverse_of: :template_drawing
embedded_in :painting_result, class_name: 'Painting', inverse_of: :result_drawing
用户模型“embeds_many”图纸,绘画模型“embeds_one”template_drawing和result_drawing。
在过去的几个小时里,我一直在努力创建一个新的绘图,将其附加到用户并定义其父级(如果有的话)。我一直在控制台玩游戏,但基本上我所做的与此类似:
User.first.drawings.last.parent_drawing = User.first.drawings.first.dup
虽然控制台看起来很开心并且返回User.first.drawings.first的内容,但User.first.drawings.last.parent_drawing返回nil ...
我试图将它们分配给变量并分配变量等。但没有任何改变。我试图创建新的图纸,并将其中一个作为另一个的父母也没有成功。
我得出的结论是,分配父母是不可能的。所以我试着反过来添加一个孩子,但我仍然没有得到父母或孩子的对象。
这里有一些失败的代码(从我的Rails代码中提取和缩短):
drawing = Drawing.new({:user => @user})
drawing.parent_drawing = @user.drawings.find(parent_id).dup
drawing.save
有趣的是,图纸本身已保存并列在user.drawings中,但没有父图片。
我做错了什么?
答案 0 :(得分:2)
根据评论中的建议,我试图从头开始重新思考我的模型。我重读了关于多态关系的文档并使Drawing多态。仍然可以将绘图嵌入到另一个绘图中,并且可以再次以递归方式嵌入。
使用Mongoid关于循环关系的doc / code(http://rdoc.info/github/mongoid/mongoid/Mongoid/Relations/Cyclic/ClassMethods)我怀疑这是因为嵌入式“recursively_embeds_many”正在做错了因为他们没有包含Drawing是多态的事实!
鉴于embedded_in语句是由多态的事实构成的,因此添加
embeds_one :base_drawing, class_name: "Drawing", as: :drawable, cyclic: true
似乎有我想要的效果。它不会像“recursively_embeds_many”那样包含“孩子”,但在我的情况下并不是必需的。
我希望这有助于下一个人在递归嵌入多态关系方面遇到麻烦。