2

如果我有:

class Post
  include MongoMapper::Document

  has_many :comments
end

如果我做:

class Comment
  include MongoMapper::EmbeddedDocument

  belongs_to :post # relevant part
end

这是否使用_root_document/创建关联_parent_document,还是我必须添加 (redundant) key :post_id

4

2 回答 2

9

您不需要 post_id 或 belongs_to :post。相反,您可以使用 embedded_in :post。这将为 _parent_reference 命名的帖子创建一个读取方法,因此您可以说 comment.post 而不是 comment._parent_reference。

class Comment
  include MongoMapper::EmbeddedDocument

  embedded_in :post
end
于 2010-11-05T18:33:56.797 回答
0

确实需要钥匙post_id

这是我测试它的方法(使用问题中的类):

> post = Post.new
 => #<Post _id: BSON::ObjectId('4cc5955ec2f79d4c84000001')>
> comment = Comment.new
 => #<Comment _id: BSON::ObjectId('4cc59563c2f79d4c84000002')>
> post.comments << comment
 => [#<Comment _id: BSON::ObjectId('4cc59563c2f79d4c84000002')>]
> post.save
 => true
> post.reload
 => #<Post _id: BSON::ObjectId('4cc5955ec2f79d4c84000001')>
> comment = post.comments.first
 => #<Comment _id: BSON::ObjectId('4cc59563c2f79d4c84000002')>
> comment.post
 => nil
> class Comment
?>  key :post_id
?>  end
 => #<MongoMapper::Plugins::Keys::Key:0xb5ab0328 @name="post_id", @type=nil, @default_value=nil, @options={}>
> comment
 => #<Comment post_id: nil, _id: BSON::ObjectId('4cc59563c2f79d4c84000002')>
> comment.post
 => nil
> comment.post = post
 => #<Post _id: BSON::ObjectId('4cc5955ec2f79d4c84000001')>
> comment.save
 => true
> comment.post
 => #<Post _id: BSON::ObjectId('4cc5955ec2f79d4c84000001')>
于 2010-10-25T14:46:34.320 回答