我有这样的场景:
blog.posts
每个帖子属于另一个对象,比如Tag(在belongs_to,has_many关系中),所以我可以这样做:
tag.posts
为了防止N 1问题,我希望能够做blog.posts,但也抓住每个帖子关联的每个标签,以便生成两个查询,一个用于帖子,一个用于所有标签(基于每个tag_id属于帖子).
我在mongoid文档中注意到我能做到:
Post.includes(:tag).where(:blog_id: blog.id)
这将获取属于博客的所有帖子,并获得与帖子相关联的每个标签并放入身份图(如果已启用).
问题是,我想做:
blog.posts
并以某种方式重新定义查询以执行上面我想要的.有没有办法做到这一点?
目前我正在通过定义扩展来缓解这个问题:
has_many :posts do def with_tags includes(:tag) end end
所以我这样做
blog.posts.with_tags
但我更喜欢这样
blog.posts
默认情况下执行上述操作.
干杯.