首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同时嵌入和非嵌入文档

同时嵌入和非嵌入文档
EN

Stack Overflow用户
提问于 2012-04-13 20:36:49
回答 1查看 200关注 0票数 1

我需要有一个模型,这将像一个嵌入式和非嵌入式的行为。

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

代码语言:javascript
复制
class MenuPosition
  include Mongoid::Document
  field :name, type: String
  field :category, type: String

我需要添加

代码语言:javascript
复制
  embedded_in :menu

干杯。

另一方面,如果我在模型中添加这一行,我不能将此模型存储为非嵌入式:

代码语言:javascript
复制
position = {
            "name" => "pork",
            "category" => "meal",
            "portion" => 100
        }
MenuPosition.create(position)

错误消息:

代码语言:javascript
复制
NoMethodError:
       undefined method `new?' for nil:NilClass

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-18 06:32:25

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

代码语言:javascript
复制
module SpecialFields
  extend ActiveSupport::Concern

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

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

代码语言:javascript
复制
include SpecialFields

在您希望单独存储为非嵌入式文档的类中,执行以下操作:

代码语言:javascript
复制
class NotEmbeddedDoc
  include Mongoid::Document

  include SpecialFields
end

在我们的项目中,这在一些事情上工作得很好。但是,它可能不适合您的情况,因为您想要嵌入许多。我认为这只适用于嵌入一个案例。我把它贴在这里,以防它对人们有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10140953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档