diff --git a/app/controllers/overview_controller.rb b/app/controllers/overview_controller.rb index 9ed920dc..bbd84bc3 100644 --- a/app/controllers/overview_controller.rb +++ b/app/controllers/overview_controller.rb @@ -29,10 +29,10 @@ class OverviewController < SqmApplicationController end def measures - @measures ||= Measure.all.includes(%i[scales admin_data_items category]) + @measures ||= Measure.all.includes(%i[scales admin_data_items category subcategory]) end def subcategories - @subcategories ||= Subcategory.all + @subcategories ||= Subcategory.all.includes(:measures) end end diff --git a/app/models/measure.rb b/app/models/measure.rb index 22c0ad4e..d13aa2f3 100644 --- a/app/models/measure.rb +++ b/app/models/measure.rb @@ -25,14 +25,15 @@ class Measure < ActiveRecord::Base end def student_survey_items_with_sufficient_responses(school:, academic_year:) - 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') - .count.keys) + @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') + .count.keys) end def teacher_scales diff --git a/db/migrate/20230610165508_add_survey_item_index_to_survey_item_responses.rb b/db/migrate/20230610165508_add_survey_item_index_to_survey_item_responses.rb new file mode 100644 index 00000000..45a11c3f --- /dev/null +++ b/db/migrate/20230610165508_add_survey_item_index_to_survey_item_responses.rb @@ -0,0 +1,6 @@ +class AddSurveyItemIndexToSurveyItemResponses < ActiveRecord::Migration[7.0] + def change + add_index :survey_item_responses, %i[school_id academic_year_id survey_item_id], + name: 'by_school_year_and_survey_item' + end +end diff --git a/db/schema.rb b/db/schema.rb index b19147f0..99a36ddd 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_05_17_191736) do +ActiveRecord::Schema[7.0].define(version: 2023_06_10_165508) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -448,6 +448,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_05_17_191736) do t.index ["academic_year_id"], name: "index_survey_item_responses_on_academic_year_id" t.index ["gender_id"], name: "index_survey_item_responses_on_gender_id" t.index ["response_id"], name: "index_survey_item_responses_on_response_id" + t.index ["school_id", "academic_year_id", "survey_item_id"], name: "by_school_year_and_survey_item" t.index ["school_id", "academic_year_id"], name: "index_survey_item_responses_on_school_id_and_academic_year_id" t.index ["school_id", "survey_item_id", "academic_year_id", "grade"], name: "index_survey_responses_on_grade" t.index ["school_id"], name: "index_survey_item_responses_on_school_id"