mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-10 07:50:33 -07:00
fix: Filter out responses that don't correspond to the grades the school serves
This commit is contained in:
parent
4711e16c03
commit
7373e2e52f
4 changed files with 22 additions and 13 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
|
||||
|
|
|
|||
|
|
@ -13,17 +13,22 @@ class SurveyItemResponse < ActiveRecord::Base
|
|||
has_one :measure, through: :survey_item
|
||||
|
||||
scope :exclude_boston, lambda {
|
||||
boston = District.find_by_name('Boston')
|
||||
boston = District.find_by_name("Boston")
|
||||
where.not(school: boston.schools) if boston.present?
|
||||
}
|
||||
|
||||
scope :averages_for_grade, ->(survey_items, school, academic_year, grade) {
|
||||
SurveyItemResponse.where(survey_item: survey_items, school:,
|
||||
academic_year: , grade:).group(:survey_item).average(:likert_score)
|
||||
scope :averages_for_grade, lambda { |survey_items, school, academic_year, grade|
|
||||
SurveyItemResponse.where(survey_item: survey_items, school:,
|
||||
academic_year:, grade:).group(:survey_item).average(:likert_score)
|
||||
}
|
||||
|
||||
scope :averages_for_gender, ->(survey_items, school, academic_year, gender) {
|
||||
SurveyItemResponse.where(survey_item: survey_items, school:,
|
||||
academic_year: , gender:).group(:survey_item).average(:likert_score)
|
||||
scope :averages_for_gender, lambda { |survey_items, school, academic_year, gender|
|
||||
SurveyItemResponse.where(survey_item: survey_items, school:,
|
||||
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:, 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