From edbb84334a634682d25690d448f586a42e6b06fa Mon Sep 17 00:00:00 2001 From: Nelson Jovel Date: Wed, 27 Dec 2023 07:37:03 -0800 Subject: [PATCH] perf: reduce number of calls for student and teacher survey items in response rate calculators --- app/models/student_response_rate_calculator.rb | 2 +- app/models/subcategory.rb | 8 ++++++++ app/models/teacher_response_rate_calculator.rb | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/models/student_response_rate_calculator.rb b/app/models/student_response_rate_calculator.rb index 5a2466bf..da563e8a 100644 --- a/app/models/student_response_rate_calculator.rb +++ b/app/models/student_response_rate_calculator.rb @@ -49,7 +49,7 @@ class StudentResponseRateCalculator < ResponseRateCalculator value < threshold end - ssi = @subcategory.survey_items.student_survey_items.map(&:id) + ssi = @subcategory.student_survey_items.map(&:id) grade_array = Array.new(ssi.length, grade) memo[grade] = si.slice(*grade_array.zip(ssi)) diff --git a/app/models/subcategory.rb b/app/models/subcategory.rb index a79c4552..d0582888 100644 --- a/app/models/subcategory.rb +++ b/app/models/subcategory.rb @@ -91,4 +91,12 @@ class Subcategory < ActiveRecord::Base Zones.new(watch_low_benchmark:, growth_low_benchmark:, approval_low_benchmark:, ideal_low_benchmark:).zone_for_score(score) end + + def student_survey_items + @student_survey_items ||= survey_items.student_survey_items + end + + def teacher_survey_items + @teacher_survey_items ||= survey_items.teacher_survey_items + end end diff --git a/app/models/teacher_response_rate_calculator.rb b/app/models/teacher_response_rate_calculator.rb index bd491de2..5f18f330 100644 --- a/app/models/teacher_response_rate_calculator.rb +++ b/app/models/teacher_response_rate_calculator.rb @@ -12,7 +12,7 @@ class TeacherResponseRateCalculator < ResponseRateCalculator def survey_items_with_sufficient_responses @survey_items_with_sufficient_responses ||= SurveyItemResponse.teacher_survey_items_with_sufficient_responses( school:, academic_year: - ).slice(*@subcategory.survey_items.teacher_survey_items.map(&:id)) + ).slice(*@subcategory.teacher_survey_items.map(&:id)) end def response_count