diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 152d79bf..b6ff3bd1 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -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 = {}) diff --git a/app/views/execution_environments/statistics.html.slim b/app/views/execution_environments/statistics.html.slim index 111c6d29..38112c4f 100644 --- a/app/views/execution_environments/statistics.html.slim +++ b/app/views/execution_environments/statistics.html.slim @@ -9,15 +9,7 @@ h1 = @execution_environment tbody - @execution_environment.exercises.each do |exercise| tr - - submissions = exercise.submissions td = exercise.title - td = submissions.average(:score) - td = submissions.count() - - minima = submissions.group(:user_id).minimum(:created_at) - - maxima = submissions.group(:user_id).maximum(:created_at) - - result = 0 - - results = {} - - maxima.each {|key, value| results[key] = value - minima[key]} - - results.values.map {|value| result += value} - - result /= results.size if results.size > 0 - td = distance_of_time_in_words(result) + td = exercise.average_score + td = exercise.submissions.count() + td = exercise.average_working_time