Mongoid有许多嵌套模型

时间:2015-03-02 08:12:27

标签: ruby-on-rails mongodb mongoid

我正在开发Rails应用程序,我从外部接收数据并将其存储在MongoDB中,我使用Mongoid作为ODM。

任务非常简单:我有Topic模型应该拥有并且属于许多Rubrics,这里的主要问题是应该嵌套rubrics(虽然是一个级别)。

我遇到的第一个解决方案是:

models/rubric.rb

class Rubric
  include Mongoid::Document

  recursively_embeds_many
  has_and_belongs_to_many :topics
end

models/topic.rb

class Topic
  include Mongoid::Document

  has_and_belongs_to_many :rubrics
end

赞成

存储在自己的集合中的Rubric,因此很容易更新它们的属性(假设我需要编辑rubric的标题)。

缺点

Mongoid不允许我从主题访问嵌套的规则,即:topic.rubrics返回所有嵌套的规则,这基本上是正确的 - mongoid不应该允许访问嵌入的文件来自外部。

不工作。

第二个解决方案:

models/rubric.rb

class Rubric
  include Mongoid::Document

  recursively_embeds_many
  embeded_in :topic
end

models/topic.rb

class Topic
  include Mongoid::Document

  embeds_many :rubrics
end

赞成

Mongo方式?将所有与集合相关的数据存储在该集合中。

缺点

Rubric不是完全独立的集合,如果我需要更改量规,我有遍历所有主题更改量规。

Mongoid不允许我从主题访问嵌套的规则,即:topic.rubrics返回所有嵌套的规则,这基本上是正确的 - mongoid不应该允许访问嵌入的文件来自外部。

不是非常干的解决方案,因为标题会在主题中重复。

不工作。

第三种解决方案:

models/rubric.rb

class Rubric
  include Mongoid::Document

  recursively_embeds_many
  embeded_in :topic
end

models/subrubric.rb

class Subrubric
  include Mongoid::Document

  belongs_to :rubric
  belongs_to :topic
end

models/topic.rb

class Topic
  include Mongoid::Document

  has_many :rubrics
  has_many :subrubrics
end

赞成

唯一的好处是这个解决方案是唯一真正有效的解决方案,但是:

缺点

此方法仅在Rubric仅嵌套一次时才有效(对于此项目可以)。但是我想拥有适用于任何嵌套级别的通用解决方案。

0 个答案:

没有答案