主题有很多帖子。获取所有主题,无需任何帖子

时间:2014-06-22 07:05:32

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

博客有“主题”,“主题”有“帖子”。

如何在没有帖子的情况下统计所有主题?所以基本上没有使用的主题。

topics = Topic.all
topics.???

3 个答案:

答案 0 :(得分:1)

Topic.includes(:posts).where('posts.topic_id is null').references(:posts).count

在看到其他答案后,我在控制台中运行了两个语句。

此答案生成以下查询

 (0.9ms)  SELECT COUNT(DISTINCT "topics"."id") FROM "topics" LEFT OUTER JOIN "posts" ON "posts"."topic_id" = "topics"."id" WHERE (posts.topic_id is null)

而另一个答案产生两个查询(显而易见)。

(0.6ms)  SELECT "posts"."topic_id" FROM "posts"
(0.5ms)  SELECT COUNT(*) FROM "topics" WHERE ("topics"."id" NOT IN (2,3,11,23))

答案 1 :(得分:0)

Topic.where(“id not in?”,Post.pluck(:topic_id))

答案 2 :(得分:0)

您可以使用此查询获取所有主题,而无需任何帖子:

Topic.where.not(id: Post.pluck(:topic_id))