Mongoid не сохраняет моих детей embeds_many на parent.save - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь настроить систему управления версиями на Mongoid. Я сталкиваюсь с проблемой, что новые объекты встроенной версии не сохраняются при сохранении родительского объекта:

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
=> []

Есть мысли? Я знаю, что для ссылочных отношений требуется опция: autosave, чтобы сохранить дочерние элементы, но ни в одной документации не указано, что это требуется для встроенных дочерних элементов, и это не устранило проблему, когда я попробовал.

1 Ответ

3 голосов
/ 06 мая 2011

Оказывается, это ошибка (на мой взгляд) в базе кодов mongoid, которая препятствует сохранению дочерних ассоциаций с именем "версии" при сохранении родителя.

Это в Mongoid :: Hierarchy :: 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

...