mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-09 15:38:21 -07:00
fix: Filter out responses that don't correspond to the grades the school serves
This commit is contained in:
parent
0bacac6962
commit
f035c4d9ad
4 changed files with 12 additions and 8 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue