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

埋め込まれたドキュメントと埋め込まれていないドキュメントに1つのモデルを使用できますか?

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

これは、いくつかの点で私たちのプロジェクトで非常にうまく機能しました。ただし、多くを埋め込みたいので、あなたの場合には適切でないかもしれません。これは、私が思うに1つのケースを埋め込む場合にのみ実際に機能します。人々の役に立つ場合に備えて、ここに投稿しました。

于 2012-05-17T22:32:24.800 に答える