2011-05-04 73 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