1

我需要有一个表现得像嵌入式和非嵌入式的模型。

例如,如果我想将此模型存储为嵌入式:

class MenuPosition
  include Mongoid::Document
  field :name, type: String
  field :category, type: String

我需要添加

  embedded_in :menu

给它。

另一方面,如果我在模型中添加这一行,我无法将此模型存储为未嵌入:

position = {
            "name" => "pork",
            "category" => "meal",
            "portion" => 100
        }
MenuPosition.create(position)

错误信息:

NoMethodError:
       undefined method `new?' for nil:NilClass

我可以将一种模型用于嵌入式和非嵌入式文档吗?

4

1 回答 1

0

在我们的项目中,我们也有类似的事情。我们所做的是将字段定义为一个模块。有点像这样:

module SpecialFields
  extend ActiveSupport::Concern

  included do
    field :my_field, type: String
    field :my_other_field, type: String
  end
end

然后在您要嵌入的班级中,只需执行以下操作:

include SpecialFields

在您想单独存储为非嵌入式文档的班级中,执行以下操作:

class NotEmbeddedDoc
  include Mongoid::Document

  include SpecialFields
end

这在我们的项目中工作得很好。但是,它可能不适合您的情况,因为您想嵌入很多。这仅适用于我认为嵌入的一种情况。我把它贴在这里以防它帮助人们。

于 2012-05-17T22:32:24.800 回答