我正在使用Rails应用,该应用需要跟踪用户所播放的每个级别的得分最高。
某个级别的每次尝试都有多个轮次,尝试中每轮的得分总和会被缓存为尝试中的total_score。
型号:
当更新中保存一轮时,它所属的尝试的total_score。我目前正在使用以下天真的实现,但计划尽快重构。在我重构之前,我想知道是否有更好的策略来保持这些信息的最新状态。
def update_high_score_if_needed
high_score = HighScore.where(user_id: self.user_id, level_id: self.level_id).first
if high_score.nil?
high_score = HighScore.create(attempt_id: self.id, level_id: self.level_id, user_id: self.user_id, score: self.total_score)
else
if high_score.score < self.total_score
high_score.update_attributes(attempt: self, score: self.total_score)
self.update_attribute(:was_high_score, true)
else
record_attempt = self.user.attempts.where(level_id: self.level_id).order('total_score DESC').first
if record_attempt.nil?
high_score.destroy
else
high_score.update_attributes(attempt: record_attempt, score: record_attempt.total_score)
end
end
end
end
我知道我可以查询这些信息,但是当我想要显示所有高分时我想要快速响应,并且如果每次尝试都很高,我希望能够存储在完成时得分。