【问题标题】:How to find Records where associations' associations are only in a certain status如何查找关联的关联仅处于某种状态的记录
【发布时间】:2020-08-21 10:11:28
【问题描述】:

所以我在一个新的微服务中有一个有点复杂的架构,我无法弄清楚如何在 Rails 6 ActiveRecord 语法中完成这个查询,而不是将模型拉入 Ruby。

查找关联帖子的关联评论均为状态的作者:“已审核”

Authors have many Posts
Posts are Commentable (polymorphic join)
(Authors are also Commentable (polymorphic join))

我能得到的最接近的是

Author.joins(posts: :comments)
      .where.not(comments: { status: :needs_moderated })
      .where(comments: { status: :moderated })
      .group('authors.id')

这让我得到所有有帖子的作者,但我想要他们所有帖子的评论都是唯一状态的作者::moderated

这可能吗?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord ruby-on-rails-6


    【解决方案1】:

    以下查询为您提供了至少一条未经审核的评论的作者:

    bad_authors = Author.joins(posts: :comments)
                        .where.not(comments: { status: :moderated })
                        .select(:id)
    

    那么下面的查询会为你提供相关文章的相关评论都是状态moderated的作者:

    Author.where.not(id: bad_authors)
    

    请注意,这也会返回没有 cmets 的作者(因为他们的所有 cmets 都经过审核,空验证一切)。如果需要,可以轻松修改查询以删除没有 cmets 的作者。

    还要注意,即使您将它分成两部分,这也会引发单个查询(带有子查询)。您可以在第一个查询中使用pluck 而不是select 来生成两个查询。什么更有效取决于您使用的数据库和您拥有的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多