Change race score calculations so the average bubbles up through survey_items

-> scales -> measure.
Precalculate averages for performance.
This commit is contained in:
rebuilt 2022-08-08 21:15:57 -07:00
parent 3f2279e2e8
commit 105f30f220
26 changed files with 379 additions and 84 deletions

View file

@ -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
View file

@ -0,0 +1,6 @@
class RaceScore < ApplicationRecord
belongs_to :measure
belongs_to :school
belongs_to :academic_year
belongs_to :race
end

View 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
View 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

View file

@ -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