次のようなシナリオがあります。
blog.posts
ここで、各投稿は別のオブジェクト、たとえば Tag に属します (belongs_to、has_many 関係)。
tag.posts
N+1 問題を防ぐために、blog.posts を実行できるようにしたいのですが、各投稿に関連付けられた各タグも取得して、2 つのクエリが生成されるようにします。1 つは投稿用で、もう 1 つはすべてのタグ用です (投稿に属する各 tag_id )。
私ができるmongoidのドキュメントで気づいた:
Post.includes(:tag).where(:blog_id: blog.id)
これにより、ブログに属するすべての投稿が取得され、投稿に関連付けられた各タグが取得され、ID マップに配置されます (有効になっている場合)。
問題は、私がやりたいことです:
blog.posts
そして、どういうわけかクエリを再定義して、上記のことを行います。それを行う方法はありますか?
現時点では、拡張機能を定義することでこれを軽減しています:
has_many :posts do
def with_tags
includes(:tag)
end
end
私がするように
blog.posts.with_tags
しかし、私はそれを好むだろう
blog.posts
はデフォルトで上記を行います。
乾杯。