#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
Итак, идея состоит в том, чтобы указать название школы и статус школы как
- статус школы-это
active
когда по крайней мере один ученик находится вactive
штате. - статус школы-это
suspended
когда нет активного ученика, но есть запись о студенте. - статус школы-это
closed
когда в школе нет записей о студентах.
Я изо всех сил пытаюсь найти запрос, чтобы получить данные, как я хотел. Так как это a has_many
, мне это кажется трудным для меня. Я использую базу данных postgresql.
Любая помощь будет оценена по достоинству.
Примечание: Мне нужен sql-запрос, чтобы найти это. (что-то вроде объединения двух таблиц, вычисления статуса на основе условия)
Комментарии:
1. Можете ли вы опубликовать образец таблиц и желаемый результат?
2. Я добавил фотографию.
Ответ №1:
Вы можете перебирать школы и считать по статусам с @school.students.group(:status).count
помощью . Он вернет упорядоченные статусы сопоставления хэшей с их количеством.