Use less memory when loading race scores

This commit is contained in:
rebuilt 2022-08-12 02:56:25 -07:00
parent 54ea1a1070
commit 58f5b01471
3 changed files with 34 additions and 35 deletions

View file

@ -1,27 +1,24 @@
class RaceScoreLoader
def self.reset(schools: School.all, academic_years: AcademicYear.all, measures: Measure.all, races: Race.all)
RaceScore.where(school: schools, academic_year: academic_years, measure: measures, race: races).delete_all
scores = []
measures.each do |measure|
schools.each do |school|
academic_years.each do |academic_year|
races.each do |race|
scores << process_score(measure:, school:, academic_year:, race:)
process_score(measure:, school:, academic_year:, race:)
end
end
end
end
RaceScore.import scores, batch_size: 1000
end
private
def self.process_score(measure:, school:, academic_year:, race:)
score = RaceScoreCalculator.new(measure:, school:, academic_year:, race:).score
rs = RaceScore.new(measure:, school:, academic_year:, race:)
rs = RaceScore.find_or_create_by(measure:, school:, academic_year:, race:)
rs.average = score.average
rs.meets_student_threshold = score.meets_student_threshold?
rs
rs.save
end
private_class_method :process_score