Sql 如何快速加载has\u many关系中最近的对象?

Sql 如何快速加载has\u many关系中最近的对象?,sql,ruby-on-rails,ruby-on-rails-3,arel,Sql,Ruby On Rails,Ruby On Rails 3,Arel,我有一个rails 3应用程序,它有类别和帖子等模型 类别 有很多帖子吗 职位 属于:类别 我希望能够显示一个类别列表,旁边列出最近的帖子,而不必循环访问每个类别的数据库,每个类别只收回一篇帖子 我想做这个问题提出的同样的事情——但希望使用活动记录 这是一件愚蠢的事情吗?我是否应该通过急于加载来收回某个类别的所有帖子?我很关心性能,这就是为什么我开始研究这个 如果不亲自建立查询,我不确定这是否可行。这方面的问题是,当您开始获取所有条件或试图限制结果时,rails处理急切加载的方式并不太好。您可以

我有一个rails 3应用程序,它有类别和帖子等模型

类别

有很多帖子吗

职位

属于:类别

我希望能够显示一个类别列表,旁边列出最近的帖子,而不必循环访问每个类别的数据库,每个类别只收回一篇帖子

我想做这个问题提出的同样的事情——但希望使用活动记录


这是一件愚蠢的事情吗?我是否应该通过急于加载来收回某个类别的所有帖子?我很关心性能,这就是为什么我开始研究这个

如果不亲自建立查询,我不确定这是否可行。这方面的问题是,当您开始获取所有条件或试图限制结果时,rails处理急切加载的方式并不太好。您可以通过创建另一个关联来实现您的目的:

class Category < ActiveRecord::Base
  has_one :last_post, :class_name => "Post", :foreign_key => "category_id", :order => "created_at desc"
end
但是,问题是,由于生成的sql,它仍然从类别中选择所有帖子,即使在调用category.last_post时,它只返回最后一篇帖子。它将生成类似以下内容的sql:

SELECT `categories`.* FROM `categories`
SELECT `posts`.* FROM `posts` WHERE (`posts`.category_id IN (1,2)) ORDER BY created_at desc

谢谢你的回答——那么在你看来,为这类事情构建查询更好吗?
SELECT `categories`.* FROM `categories`
SELECT `posts`.* FROM `posts` WHERE (`posts`.category_id IN (1,2)) ORDER BY created_at desc