class MigrateStudentWorkCompeleteStatus < ActiveRecord::Migration[5.2] def change student_works = StudentWork.where("myshixun_id is not null and myshixun_id != 0") student_works.includes(homework_common: :homework_challenge_settings, myshixun: :games).find_each do |work| if work.myshixun && work.homework_common myshixun = work.myshixun homework= work.homework_common setting_time = homework.homework_group_setting(myshixun.user_id) homework_end_or_late_time = homework.allow_late ? homework.late_time : setting_time.end_time challenge_ids = homework.homework_challenge_settings.pluck(:challenge_id) games = myshixun.games.select{ |game| challenge_ids.include?(game.challenge_id) } myshixun_endtime = games.select{|game| game.status == 2}.size == games.size ? games.map(&:end_time).max : nil if work.work_status != 0 && homework_end_or_late_time.present? if myshixun_endtime.present? && myshixun_endtime <= homework_end_or_late_time # 2是按时通关, 3是迟交通关 compelete_status = setting_time.end_time.present? && myshixun_endtime < setting_time.end_time ? 2 : 3 else compelete_status = 1 # 未通关 end work.update_column("compelete_status", compelete_status) end end end end end