首页 > 解决方案 > Ruby on Rails | Postgres:如何查找具有状态的记录(根据 has_many 约束计算)。请检查说明

问题描述

我有一个学校列表页面,我必须在其中列出学校的名称和状态。状态是根据学生的状态计算的。

这是我的模型...

class School < ActiveRecord::Base
  has_many :students
  has_many :teachers
end

class Student < ActiveRecord::Base
  belongs_to :school

  enum status: {
    active: 'active',
    suspended: 'suspended'
  }
end

所以,这个想法是将学校名称和学校状态列为

  1. 学校状态是active指至少一名学生在该active州。
  2. 学校状态是suspended指没有活跃学生但存在学生记录的情况。
  3. 学校状态是closed没有学生反对学校的记录。

我正在努力找到查询以获取我想要的数据。由于这是一个has_many我发现它对我来说很困难。我使用 postgresql 数据库。

任何帮助将不胜感激。

注意:我需要 sql 查询才能找到它。(类似于组合两个表,根据条件计算状态)

在此处输入图像描述

标签: sqlruby-on-railspostgresqljoingroup-by

解决方案


您可以遍历学校并使用@school.students.group(:status).count. 它将返回一个有序的哈希映射状态及其计数。


推荐阅读