在文档中它说你可以使用 inverse_of: nil 但并没有真正描述用例: http: //mongoid.org/en/mongoid/docs/relations.html#has_and_belongs_to_many
我假设它在一个对象有很多另一个对象的情况下很有用,所以你可以用 inverse_of nil 完全跳过那一侧并节省一些存储空间对吗?
例如:
class Post
has_and_belongs_to_many :tags
end
class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end
一个标签可能属于数百或数千个帖子,但一个帖子可能只有 5 个标签左右。
那么这是一个很好的用例吗?我想你仍然可以做
tag.posts
等正常,主要的权衡是它改变了查询:
Post.find(tag.post_ids)
进入
Post.where(tag_ids: tag.id)
如果您在 tag_ids 上有一个索引,它似乎仍然会很快。所以也许最好的是:
class Post
has_and_belongs_to_many :tags, index: true
end
class Tag
has_and_belongs_to_many :posts, inverse_of: nil
end
只是想检查一下我的想法。