仅为Rails和MySql中的每个帖子预加载最新评论

时间:2015-01-26 18:32:59

标签: mysql ruby-on-rails activerecord greatest-n-per-group

我有很多帖子有多条评论,但我需要显示帖子,其中包含每篇帖子的所有信息和最新评论。

通过一种简单的方法,我为每个帖子提供了额外的评论表请求。

如何在没有N + 1问题的情况下获取最近评论的帖子列表?

我的情况很常见 - 帖子列表,最后评论。

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)

更多信息:Rails - Nested includes on Active Records?