假设我有 2 个不同的模型;用户和帖子。我想获取每个用户的最新帖子。 所以输出会是这样的。
[<Post user_id:1, content:"yadayada" ....>, <Post user_id:2, content:"blabla"...> ......]
每个用户不超过一条记录是我有点困惑的部分。
我用谷歌搜索了一下,发现复杂的事件记录查询可以处理这个问题。我想知道是否有任何简单的方法 rails3.present? ? "rails3" : "rails"
方式。
感觉这应该不会超过 1 行代码。 提前致谢。
最佳答案
由于我还不能发表评论,这里是急切加载的答案:
N+1 问题意味着当您使用 User.all
查询所有用户时,ActiveRecord 将无法获取帖子,因此 ActiveRecord 将触发一个新的 SQL 查询,选择最后一个帖子您迭代的每个用户。如果您有 50 个用户,则这将是对 50 个用户的一个查询,然后是对每个最后帖子的 50 个查询。
如果您有很多用户,数据库和 Rails 应用程序之间的延迟会降低站点的性能并使用户等待。
预加载允许您将关联模型获取到您正在查询的模型,因此您可以编写:
User.includes(:posts).all.map { |u| u.posts.last }
ActiveRecord 将首先查询所有用户,然后在迭代用户之前一次性查询与所有用户关联的所有帖子,从而避免对每个用户进行新查询。这只是两个查询。
但是,如果您的用户有大量帖子,这也有缺点,因为您将获取所有用户的所有帖子而不仅仅是最新帖子,从而使数据库紧张并生成大量不需要的 I/O。
关于ruby-on-rails - 如何获取rails中每个用户的最新帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13662739/