Make user stats in exercise statistics faster
This commit is contained in:
@ -155,7 +155,15 @@ class ExercisesController < ApplicationController
|
|||||||
if(@external_user)
|
if(@external_user)
|
||||||
render 'exercises/external_users/statistics'
|
render 'exercises/external_users/statistics'
|
||||||
else
|
else
|
||||||
render 'exercises/statistics'
|
user_statistics = {}
|
||||||
|
query = "SELECT user_id, MAX(score) AS maximum_score, COUNT(id) AS runs
|
||||||
|
FROM submissions WHERE exercise_id = 101 GROUP BY user_id;"
|
||||||
|
ActiveRecord::Base.connection.execute(query).each do |tuple|
|
||||||
|
user_statistics[tuple["user_id"].to_i] = tuple
|
||||||
|
end
|
||||||
|
render locals: {
|
||||||
|
user_statistics: user_statistics
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -22,8 +22,7 @@ h1 = @exercise
|
|||||||
tbody
|
tbody
|
||||||
- @exercise.send(symbol).distinct().each do |user|
|
- @exercise.send(symbol).distinct().each do |user|
|
||||||
tr
|
tr
|
||||||
- submissions = @exercise.submissions.where('user_id=?', user.id)
|
|
||||||
td = link_to_if symbol==:external_users, "#{user.name} (#{user.email})", {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id}
|
td = link_to_if symbol==:external_users, "#{user.name} (#{user.email})", {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id}
|
||||||
td = submissions.maximum('score') or 0
|
td = user_statistics[user.id]['maximum_score'] or 0
|
||||||
td = submissions.count('id')
|
td = user_statistics[user.id]['runs']
|
||||||
td = @exercise.average_working_time_for(user.id) or 0
|
td = @exercise.average_working_time_for(user.id) or 0
|
||||||
|
Reference in New Issue
Block a user