Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 递归嵌入&;Mongoid-父对象不';救不了_Ruby On Rails_Ruby_Mongodb_Mongoid - Fatal编程技术网

Ruby on rails 递归嵌入&;Mongoid-父对象不';救不了

Ruby on rails 递归嵌入&;Mongoid-父对象不';救不了,ruby-on-rails,ruby,mongodb,mongoid,Ruby On Rails,Ruby,Mongodb,Mongoid,我对这个问题渐渐发疯了。我很确定这是一件微不足道的事情,我误解了一些事情,因为我刚刚开始我的Mongoid(和RubyonRails)之旅 我的模型如下: class Drawing include Mongoid::Document field :image_uid image_accessor :image field :date_created, type: Time, default: Time.now recursively_embeds_many

我对这个问题渐渐发疯了。我很确定这是一件微不足道的事情,我误解了一些事情,因为我刚刚开始我的Mongoid(和RubyonRails)之旅

我的模型如下:

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
用户模型“嵌入多个”图形,绘制模型“嵌入一个”模板图形和结果图形

在过去的几个小时里,我一直在尝试创建一个新图形,将其附加到用户,并定义其父图形(如果有)。我经常在控制台中玩,但基本上我所做的与此类似:

User.first.drawings.last.parent_drawing = User.first.drawings.first.dup
虽然控制台看起来很高兴并返回User.first.drawings.first的内容,但User.first.drawings.last.parent\u drawing返回nil

我试着将它们分配给变量,分配变量等等,但没有任何变化。我曾尝试创建新的图形,并将其中一个作为另一个的父图形,但也没有成功

我得出的结论是,指派家长是不可能的。所以我试着用另一种方法添加一个子对象,但我仍然没有得到一个包含父对象或子对象的对象

下面是一些失败的代码(从我的Rails代码中提取并缩短):

有趣的是,图形本身被保存并列在user.drawings中,但没有父图形


我做错了什么?

接受评论中的建议,我试图从头开始重新思考我的模型。我重新阅读了关于多态关系的文档,并使绘图具有多态性。一个图形仍然可以嵌入到另一个图形中,并且可以递归地再次嵌入

使用Mongoid关于循环关系的文档/代码(http://rdoc.info/github/mongoid/mongoid/Mongoid/Relations/Cyclic/ClassMethods)我怀疑这是因为“递归地嵌入”所做的嵌入是错误的,因为它们没有包括绘图是多态的这一事实

鉴于嵌入的_-in语句是由多态性这一事实构成的,添加

embeds_one :base_drawing, class_name: "Drawing", as: :drawable, cyclic: true
似乎有我想要的效果。它不会像“递归嵌入”那样包含“children”,但在我的例子中没有必要


我希望这能帮助下一个在递归嵌入多态关系方面遇到困难的人。

我温和地建议,如果你刚刚开始,你问题中的模型太复杂了。您通过两个关系将图形嵌入到绘画中,也嵌入到用户中,但您没有指定多态性:true。你也有很多递归的嵌入。您是否对多态性和递归嵌入都有足够的了解,能够独立地处理您的问题中更复杂的组合?我开始研究它,发现了它的复杂性,并恳请您将问题简化到最低限度,如果您想让人们详细地回答您的问题。您好!非常感谢您抽出时间回答。我想说我理解多态性和递归嵌入是概念,但我想我正在努力解决的是Rails的语法来表达这两个概念。我肯定会尝试按照建议简化模型,但在我之前使用不相关(和更简单)模型进行的测试中,问题仍然存在。如果您对如何将父对象添加到嵌入其自身的模型以及多次嵌入其他模型的模型有任何想法,那么它将非常有用。干杯很高兴您能够找到解决方案,并与他人分享。
embeds_one :base_drawing, class_name: "Drawing", as: :drawable, cyclic: true