0

この例では、クラスを永続モデルにするために両方が使用されているように見えます(included)が、どちらを使用する必要があるかは明確ではありません。

4

1 に答える 1

2

AMongoMapper::Documentは、最上位レコードとしてデータベースに保存されます。AMongoMapper::EmbeddedDocumentは別のドキュメント内に保存されます。たとえば、ブログアプリケーションがあるとします。PostCommentモデルがあります。彼らはこのように見えるかもしれません:

require 'mongo_mapper'
MongoMapper.database = 'test'

class Post
  include MongoMapper::Document

  key :title
  key :body
  key :comments

  many :comments
end

class Comment
  include MongoMapper::EmbeddedDocument

  key :author
  key :body
end

p = Post.new(:title => 'Some post', :body => 'About something')
p.comments << Comment.new(:author => 'Emily', :body => 'A comment')

p.save

puts Post.all.map(&:inspect)

次のようなドキュメントがmongoデータベースに生成されます。

{ "_id" : ObjectId("4c4dcf4b712337464e000001"),
  "title" : "Some post",
  "body" : "About something",
  "comments" : [
        {
                "body" : "A comment",
                "author" : "Emily",
                "_id" : ObjectId("4c4dcf4b712337464e000002")
        }
] }

MongoMapperを介してそれらと対話するという点では、やのMongoMapper::Documentようなメソッドへの応答のみです。Aには、その親ドキュメントからのみアクセスできます。これは、親モデルの明らかに補助的なモデルにのみ使用する必要があり、その親のコンテキストでのみ使用されることを意味します。findsaveMongoMapper::EmbeddedDocumentMongoMapper::EmbeddedDocument

于 2010-07-26T18:14:47.540 に答える