You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1.5 KiB
31 lines
1.5 KiB
class MigrateExerciseSubjectiveReviewed < ActiveRecord::Migration[5.2]
|
|
def change
|
|
exercises = Exercise.where("exercise_status > 1")
|
|
exercises.includes(:exercise_questions, score_exercise_users: [:exercise_user_scores, :user]).find_in_batches(batch_size: 200) do |p|
|
|
Parallel.each(p, in_threads: 4) do |exercise|
|
|
subject_question_ids = exercise.exercise_questions.select{|question| question.question_type == 4}.map(&:id)
|
|
unless subject_question_ids.blank?
|
|
exercise.score_exercise_users.each do |ex_user|
|
|
if ex_user.exercise_user_scores.size > 0
|
|
ex_user.update_columns(reviewed: 1, subjective_reviewed: 1)
|
|
else
|
|
undo_status = true
|
|
teacher_comment_status = false
|
|
exercise.exercise_questions.select{|question| question.question_type == 4}.each do |q|
|
|
answer = q.exercise_answers.find_by(user_id: ex_user.user_id)
|
|
undo_status &= (answer.blank? || answer.answer_text.blank?)
|
|
teacher_comment_status ||= (answer.present? && answer.score >= 0.0 || answer&.exercise_answer_comments.present?)
|
|
end
|
|
|
|
reviewed = undo_status || teacher_comment_status
|
|
subjective_reviewed = reviewed
|
|
ex_user.update_columns(reviewed: reviewed, subjective_reviewed: subjective_reviewed)
|
|
end
|
|
end
|
|
end
|
|
puts "exercise_id: #{exercise.id}"
|
|
end
|
|
end
|
|
end
|
|
end
|