2011-05-04 2 views
1

몽고 이드에서 버전 시스템을 설정하려고합니다.몽고 이드가 내 embeds_many children을 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 코드베이스의 버그 (제 의견으로는)가 있습니다. https://github.com/mongoid/mongoid/issues/904

:

내가이 여기에 대한 GitHub의에 문제를 만들었습니다

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 

Mongoid :: 계층 :: InstanceMethods에

관련 문제