Push statistics features to model

This commit is contained in:
Maximilian Grundke
2015-10-29 15:08:02 +01:00
parent c5dd1e712b
commit c41818e324
2 changed files with 10 additions and 13 deletions

View File

@ -23,14 +23,19 @@ class Exercise < ActiveRecord::Base
validates :token, presence: true, uniqueness: true
def average_percentage
(average_score/ maximum_score * 100).round if average_score
(average_score / maximum_score * 100).round if average_score
end
def average_score
if submissions.exists?(cause: 'submit')
maximum_scores_query = submissions.select('MAX(score) AS maximum_score').where(cause: 'submit').group(:user_id).to_sql.sub('$1', id.to_s)
self.class.connection.execute("SELECT AVG(maximum_score) AS average_score FROM (#{maximum_scores_query}) AS maximum_scores").first['average_score'].to_f
end
else 0 end
end
def average_working_time
working_time_query = submissions.select('MAX(created_at) - MIN(created_at) AS time').group(:user_id).to_sql.sub('$1', id.to_s)
self.class.connection.execute("SELECT AVG(time) AS average_time FROM (#{working_time_query}) AS working_times").first['average_time']
end
def duplicate(attributes = {})