diff --git a/app/models/measure.rb b/app/models/measure.rb index 04c06e07..8ab9200d 100644 --- a/app/models/measure.rb +++ b/app/models/measure.rb @@ -25,14 +25,14 @@ class Measure < ActiveRecord::Base end def student_survey_items_with_sufficient_responses(school:, academic_year:) - @student_survey_items_with_sufficient_responses ||= - SurveyItem.where(id: SurveyItem.joins('inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id') + @student_survey_items_with_sufficient_responses ||= SurveyItem.where(id: SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id") .student_survey_items .where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year, - "survey_item_responses.survey_item_id": survey_items.student_survey_items) - .group('survey_items.id') - .having('count(*) >= 10') + "survey_item_responses.survey_item_id": survey_items.student_survey_items, + "survey_item_responses.grade": school.grades(academic_year:)) + .group("survey_items.id") + .having("count(*) >= 10") .count.keys) end diff --git a/app/models/school.rb b/app/models/school.rb index 53fd88a9..98367218 100644 --- a/app/models/school.rb +++ b/app/models/school.rb @@ -19,4 +19,8 @@ class School < ApplicationRecord .where(districts: { qualtrics_code: district_code }) .find_by_qualtrics_code(school_code) end + + def grades(academic_year:) + Respondent.find_by(school: self, academic_year:)&.counts_by_grade&.keys || (-1..12).to_a + end end diff --git a/app/models/survey_item_response.rb b/app/models/survey_item_response.rb index 5e561160..b54bb35b 100644 --- a/app/models/survey_item_response.rb +++ b/app/models/survey_item_response.rb @@ -24,11 +24,11 @@ class SurveyItemResponse < ActiveRecord::Base scope :averages_for_gender, lambda { |survey_items, school, academic_year, gender| SurveyItemResponse.where(survey_item: survey_items, school:, - academic_year:, gender:).group(:survey_item).average(:likert_score) + academic_year:, gender:, grade: school.grades(academic_year:)).group(:survey_item).average(:likert_score) } scope :averages_for_income, lambda { |survey_items, school, academic_year, income| SurveyItemResponse.where(survey_item: survey_items, school:, - academic_year:, income:).group(:survey_item).average(:likert_score) + academic_year:, income:, grade: school.grades(academic_year:)).group(:survey_item).average(:likert_score) } end diff --git a/app/services/race_score_loader.rb b/app/services/race_score_loader.rb index 99977608..7f23b382 100644 --- a/app/services/race_score_loader.rb +++ b/app/services/race_score_loader.rb @@ -61,7 +61,7 @@ class RaceScoreLoader @grouped_responses ||= Hash.new do |memo, (school, academic_year, survey_items, race)| memo[[school, academic_year, survey_items, race]] = SurveyItemResponse.joins("JOIN student_races on survey_item_responses.student_id = student_races.student_id JOIN students on students.id = student_races.student_id").where( - school:, academic_year: + school:, academic_year:, grade: school.grades(academic_year:) ).where("student_races.race_id": race.id).group(:survey_item_id).having("count(*) >= 10").average(:likert_score) end