mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 21:48:16 -08:00
Change race score calculations so the average bubbles up through survey_items
-> scales -> measure. Precalculate averages for performance.
This commit is contained in:
parent
3f2279e2e8
commit
105f30f220
26 changed files with 379 additions and 84 deletions
|
|
@ -147,7 +147,7 @@ class Measure < ActiveRecord::Base
|
|||
def collect_survey_item_average(survey_items:, school:, academic_year:)
|
||||
@collect_survey_item_average ||= Hash.new do |memo, (survey_items, school, academic_year)|
|
||||
averages = survey_items.map do |survey_item|
|
||||
grouped_responses(school:, academic_year:)[survey_item]
|
||||
grouped_responses(school:, academic_year:)[survey_item.id]
|
||||
end.remove_blanks
|
||||
memo[[survey_items, school, academic_year]] = averages.average || 0
|
||||
end
|
||||
|
|
@ -169,7 +169,7 @@ class Measure < ActiveRecord::Base
|
|||
def grouped_responses(school:, academic_year:)
|
||||
@grouped_responses ||= Hash.new do |memo, (school, academic_year)|
|
||||
memo[[school, academic_year]] =
|
||||
SurveyItemResponse.where(school:, academic_year:).group(:survey_item).average(:likert_score)
|
||||
SurveyItemResponse.where(school:, academic_year:).group(:survey_item_id).average(:likert_score)
|
||||
end
|
||||
@grouped_responses[[school, academic_year]]
|
||||
end
|
||||
|
|
|
|||
6
app/models/race_score.rb
Normal file
6
app/models/race_score.rb
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class RaceScore < ApplicationRecord
|
||||
belongs_to :measure
|
||||
belongs_to :school
|
||||
belongs_to :academic_year
|
||||
belongs_to :race
|
||||
end
|
||||
17
app/models/race_score_calculator.rb
Normal file
17
app/models/race_score_calculator.rb
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RaceScoreCalculator
|
||||
include Analyze::Graph::Column::RacialScore
|
||||
attr_reader :measure, :school, :academic_year, :race
|
||||
|
||||
def initialize(measure:, school:, academic_year:, race:)
|
||||
@measure = measure
|
||||
@school = school
|
||||
@academic_year = academic_year
|
||||
@race = race
|
||||
end
|
||||
|
||||
def score
|
||||
race_score(measure:, school:, academic_year:, race:)
|
||||
end
|
||||
end
|
||||
12
app/models/sample.rb
Normal file
12
app/models/sample.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class Sample
|
||||
attr_reader :school, :academic_year, :category, :measure, :race
|
||||
|
||||
def initialize
|
||||
@school = School.find_by_slug 'milford-high-school'
|
||||
@academic_year = AcademicYear.last
|
||||
@category = Category.find_by_category_id '1'
|
||||
@subcategory = Subcategory.find_by_subcategory_id '1A'
|
||||
@measure = Measure.find_by_measure_id '1A-ii'
|
||||
@race = Race.find_by_qualtrics_code 1
|
||||
end
|
||||
end
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
class Student < ApplicationRecord
|
||||
has_many :survey_item_responses
|
||||
has_many :student_races
|
||||
has_many :races, through: :student_races
|
||||
has_and_belongs_to_many :races, join_table: :student_races
|
||||
|
||||
encrypts :lasid, deterministic: true
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue