perf: reduce number of queries for teacher survey_items

rpp-main
Nelson Jovel 2 years ago
parent f3fddd67b0
commit af82f6999a

@ -57,4 +57,16 @@ class SurveyItemResponse < ActiveRecord::Base
end
@grouped_responses[[school, academic_year]]
end
def self.teacher_survey_items_with_sufficient_responses(school:, academic_year:)
@teacher_survey_items_with_sufficient_responses ||= Hash.new do |memo, (school, academic_year)|
hash = SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id")
.teacher_survey_items
.where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year)
.group("survey_items.id")
.having("count(*) > 0").count
memo[[school, academic_year]] = hash
end
@teacher_survey_items_with_sufficient_responses[[school, academic_year]]
end
end

@ -10,15 +10,19 @@ class TeacherResponseRateCalculator < ResponseRateCalculator
end
def survey_items_with_sufficient_responses
SurveyItem.joins("inner join survey_item_responses on survey_item_responses.survey_item_id = survey_items.id")
.teacher_survey_items
.where("survey_item_responses.school": school, "survey_item_responses.academic_year": academic_year, "survey_item_responses.survey_item_id": @subcategory.survey_items.teacher_survey_items)
.group("survey_items.id")
.having("count(*) >= 0").count
@survey_items_with_sufficient_responses ||= {}.tap do |hash|
@subcategory.survey_items.teacher_survey_items.map do |survey_item|
si = SurveyItemResponse.teacher_survey_items_with_sufficient_responses(school:, academic_year:)
count = si[survey_item.id]
next unless count
hash[survey_item.id] = count
end
end
end
def response_count
@response_count ||= survey_items_with_sufficient_responses.values.sum
@response_count ||= survey_items_with_sufficient_responses&.values&.sum
end
def total_possible_responses

Loading…
Cancel
Save