ドキュメントでは、 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
自分の考えを確認したいだけです。