Ruby on Rails | Postgres : Как найти записи со статусом (который рассчитывается на основе ограничения has_many). Пожалуйста, ознакомьтесь с описанием

#sql #ruby-on-rails #postgresql #join #group-by

Вопрос:

У меня есть страница со списком школ, где я должен указать название и статус школы. Статус рассчитывается на основе статуса студента.

Вот мои модели…

 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 когда в школе нет записей о студентах.

Я изо всех сил пытаюсь найти запрос, чтобы получить данные, как я хотел. Так как это a has_many , мне это кажется трудным для меня. Я использую базу данных postgresql.

Любая помощь будет оценена по достоинству.

Примечание: Мне нужен sql-запрос, чтобы найти это. (что-то вроде объединения двух таблиц, вычисления статуса на основе условия)

введите описание изображения здесь

Комментарии:

1. Можете ли вы опубликовать образец таблиц и желаемый результат?

2. Я добавил фотографию.

Ответ №1:

Вы можете перебирать школы и считать по статусам с @school.students.group(:status).count помощью . Он вернет упорядоченные статусы сопоставления хэшей с их количеством.