この例では、クラスを永続モデルにするために両方が使用されているように見えます(included)が、どちらを使用する必要があるかは明確ではありません。
1 に答える
2
AMongoMapper::Documentは、最上位レコードとしてデータベースに保存されます。AMongoMapper::EmbeddedDocumentは別のドキュメント内に保存されます。たとえば、ブログアプリケーションがあるとします。PostとCommentモデルがあります。彼らはこのように見えるかもしれません:
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 に答える