我需要一个表现得像嵌入式而非嵌入式的模型。
例如,如果我想将此模型存储为嵌入式:
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
我可以将一个模型用于嵌入式和非嵌入式文档吗?
答案 0 :(得分: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
在我们的项目中,这很好用。但是,它可能不适合你的情况,因为你想嵌入很多。这只适用于嵌入我认为的一个案例。我已经将它发布在这里,以防人们使用。