我有很多帖子有多条评论,但我需要显示帖子,其中包含每篇帖子的所有信息和最新评论。
通过一种简单的方法,我为每个帖子提供了额外的评论表请求。
如何在没有N + 1问题的情况下获取最近评论的帖子列表?
我的情况很常见 - 帖子列表,最后评论。
答案 0 :(得分:1)
您可以使用.includes
急切加载您知道将要使用的对象。我认为我的逻辑是正确的,你最终会得到一个独特的帖子列表,其中至少有一条评论符合你的标准。
def recently_updated_posts
comments = Comment.includes(:post).where("updated_at > ?", some_time)
list_of_posts = posts.comments.map { |c| c.post }
return list_of_posts.uniq!
end
您可以通过使用嵌套的包含语句来进一步减少查询负载,看起来很傻:
Comment.includes(posts: :comments).where("updated_at > ?", some_time)