splitted user in groups for assigning bonus exercises
This commit is contained in:
@ -53,28 +53,43 @@ class ProxyExercise < ActiveRecord::Base
|
|||||||
end
|
end
|
||||||
|
|
||||||
def find_matching_exercise(user)
|
def find_matching_exercise(user)
|
||||||
exercises_user_has_accessed = user.submissions.where("cause IN ('submit','assess')").map{|s| s.exercise}.uniq
|
user_group = UserGroupSeparator.getProxyExerciseGroup(user)
|
||||||
tags_user_has_seen = exercises_user_has_accessed.map{|ex| ex.tags}.uniq.flatten
|
case user_group
|
||||||
Rails.logger.debug("exercises_user_has_accessed #{exercises_user_has_accessed.map{|e|e.id}.join(",")}")
|
when :dummy_assigment
|
||||||
|
rec_ex = select_easiest_exercise(exercises)
|
||||||
|
@reason[:reason] = "dummy group"
|
||||||
|
Rails.logger.debug("assigned user to dummy group, and gave him exercise: #{rec_ex.title}")
|
||||||
|
rec_ex
|
||||||
|
when :random_assigment
|
||||||
|
@reason[:reason] = "random group"
|
||||||
|
rec_ex = exercises.shuffle.first
|
||||||
|
Rails.logger.debug("assigned user to random group, and gave him exercise: #{rec_ex.title}")
|
||||||
|
rec_ex
|
||||||
|
when :recommended_assignment
|
||||||
|
exercises_user_has_accessed = user.submissions.where("cause IN ('submit','assess')").map{|s| s.exercise}.uniq.compact
|
||||||
|
tags_user_has_seen = exercises_user_has_accessed.map{|ex| ex.tags}.uniq.flatten
|
||||||
|
Rails.logger.debug("exercises_user_has_accessed #{exercises_user_has_accessed.map{|e|e.id}.join(",")}")
|
||||||
|
|
||||||
# find execises
|
# find execises
|
||||||
potential_recommended_exercises = []
|
potential_recommended_exercises = []
|
||||||
exercises.each do |ex|
|
exercises.each do |ex|
|
||||||
## find exercises which have only tags the user has already seen
|
## find exercises which have only tags the user has already seen
|
||||||
if (ex.tags - tags_user_has_seen).empty?
|
if (ex.tags - tags_user_has_seen).empty?
|
||||||
potential_recommended_exercises << ex
|
potential_recommended_exercises << ex
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
Rails.logger.debug("potential_recommended_exercises: #{potential_recommended_exercises.map{|e|e.id}}")
|
Rails.logger.debug("potential_recommended_exercises: #{potential_recommended_exercises.map{|e|e.id}}")
|
||||||
# if all exercises contain tags which the user has never seen, recommend easiest exercise
|
# if all exercises contain tags which the user has never seen, recommend easiest exercise
|
||||||
if potential_recommended_exercises.empty?
|
if potential_recommended_exercises.empty?
|
||||||
Rails.logger.debug("matched easiest exercise in pool")
|
Rails.logger.debug("matched easiest exercise in pool")
|
||||||
@reason[:reason] = "easiest exercise in pool. empty potential exercises"
|
@reason[:reason] = "easiest exercise in pool. empty potential exercises"
|
||||||
select_easiest_exercise(exercises)
|
select_easiest_exercise(exercises)
|
||||||
else
|
else
|
||||||
recommended_exercise = select_best_matching_exercise(user, exercises_user_has_accessed, potential_recommended_exercises)
|
recommended_exercise = select_best_matching_exercise(user, exercises_user_has_accessed, potential_recommended_exercises)
|
||||||
recommended_exercise
|
recommended_exercise
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
private :find_matching_exercise
|
private :find_matching_exercise
|
||||||
|
|
||||||
|
@ -16,10 +16,13 @@ class UserGroupSeparator
|
|||||||
def self.getProxyExerciseGroup(user)
|
def self.getProxyExerciseGroup(user)
|
||||||
lastDigitCreatedAt = user.created_at.to_i % 10
|
lastDigitCreatedAt = user.created_at.to_i % 10
|
||||||
if lastDigitCreatedAt < 2 # 0,1
|
if lastDigitCreatedAt < 2 # 0,1
|
||||||
|
puts "dummy"
|
||||||
:dummy_assigment
|
:dummy_assigment
|
||||||
elsif lastDigitCreatedAt < 4 # 2,3
|
elsif lastDigitCreatedAt < 4 # 2,3
|
||||||
|
puts "random_assignment"
|
||||||
:random_assigment
|
:random_assigment
|
||||||
else # 4,5,6,7,8,9
|
else # 4,5,6,7,8,9
|
||||||
|
puts "recommended_assignment"
|
||||||
:recommended_assignment
|
:recommended_assignment
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user