Ссылка на Mongoid recursively_embeds_many из другого документа - PullRequest
0 голосов
/ 11 сентября 2011

У меня есть две модели документов, которые вызывают проблемы:

class Component
  include Mongoid::Document
  include Mongoid::Versioning

  recursively_embeds_many
end

class Institution
  include Mongoid::Document

  has_many :components
end

Я понимаю, что вы не сможете ссылаться на встроенную модель из другого документа.Я надеюсь, однако, что с рекурсивно внедренными документами есть способ сослаться на вершину дерева из другого документа?Если невозможно вообще использовать эти отношения вместе, какие альтернативы у меня есть, чтобы установить отношение один-ко-многим между Учреждением и Компонентом при сохранении рекурсивного характера компонента?

1 Ответ

2 голосов
/ 12 сентября 2011

То, что вы пытаетесь сделать, звучит разумно, но Mongoid не позволит вам связать класс, который может быть внедрен с другим классом через ассоциацию. Когда я попробовал, я получил исключение в этом файле (строка 218) при добавлении (верхнего уровня) компонента в учреждение.

Самый простой вариант для вас - встроить компонент в учреждение, например,

class Institution
  include Mongoid::Document

  embeds_many :components
end

В противном случае, если вы хотите поделиться деревьями Компонентов с различными Учреждениями, я думаю, вам нужно будет ввести в модель какой-то контейнерный объект и определить ассоциацию «многие-многие» с Учреждением, например ::1008*

class Component
  include Mongoid::Document
  include Mongoid::Versioning

  recursively_embeds_many
end

class ComponentTree
  include Mongoid::Document

  embeds_many :components
  has_and_belongs_to_many :institutions
end

class Institution
  include Mongoid::Document

  has_and_belongs_to_many :component_trees
end
...