所以我有两个模型Category
和Topic
,任何类别都可以有很多主题。
问题是,如何查询所有类别并包含每个类别的最新更新主题?
如果我这样做
class Category < ActiveRecord::Base
has_many :topics
has_one :last_updated_topic, -> {order(updated_at: :desc)}, class_name: 'Topic'
end
和查询一样 - &gt;
Category.all.includes(:last_updated_topic)
然后它可以工作,但令我害怕的是,我有一个SQL查询加载这样的主题:
SELECT "topics".* FROM "topics" WHERE "topics"."category_id" IN (1, 2, 3) ORDER BY "topics"."updated_at" DESC
因此它会加载所有主题,当我只需要每个类别的最新更新主题时,可以有数千个主题。
所以我想知道是否有一种简单的方法可以在不编写自定义SQL的情况下解决此问题,或者我是否对某些内容有误?
我应该使用它吗? - &GT;
SELECT categories.*, t.title as last_topic_title FROM "categories" LEFT JOIN (SELECT topics.* FROM topics ORDER BY topics.updated_at DESC LIMIT 1) t ON categories.id = t.category_id
答案 0 :(得分:-1)
您可以使用内部查询:
has_one :last_updated_topic, -> { where(updated_at: Topic.maximum(:updated_at)), class_name: 'Topic'