2011-05-04 41 views
1

我想在Mongoid上设置一个版本控制系统。我运行到这个问题,当父对象被保存未保存的新的嵌入式版本的对象:Mongoid没有保存我的embeds_many孩子在parent.save

class Version 
    include Mongoid::Document 
    embedded_in :memorable, :polymorphic => true 

    field :version_number, :type => Integer 
end 

class Post 
    include Mongoid::Document 
    embeds_many :versions, :as => :memorable 

    before_save :create_version 

    field :version, :type => Integer, :default => 1 

    def create_version 
     self.versions.build({:version_number => self.version}) 
     self.version = version + 1 
    end 
end 

@post = Post.create(:content => "Hello there!") 
@post.update_attributes(:content => "Back at you!") 

@post.reload 
@post.versions 
=> [] 

有什么想法?我知道引用的关系需要一个:自动保存选项来保存孩子,但没有一个文档说明这是嵌入式孩子所必需的,并且在我尝试时没有解决问题。

回答

3

事实证明,这是一个在mongoid代码库中的错误(在我看来),它可以防止在保存父项时保存名为“版本”的子关联。

这是Mongoid ::层次:: InstanceMethods

def _children 
    relations.inject([]) do |children, (name, metadata)| 
     children.tap do |kids| 
      if metadata.embedded? && name != "versions" 
       child = send(name) 
       child.to_a.each do |doc| 
        kids.push(doc).concat(doc._children) 
       end unless child.blank? 
      end 
     end 
    end 
end 

我创建了GitHub上的问题,这在这里: https://github.com/mongoid/mongoid/issues/904