74 lines
1.8 KiB
Ruby
74 lines
1.8 KiB
Ruby
# status 1:完成实训
|
|
class Myshixun < ActiveRecord::Base
|
|
attr_accessible :description, :name, :parent_id, :user_id, :gpid, :forked_from, :visits, :is_public, :identifier
|
|
# has_many :users, :through => :myshixun_members
|
|
has_many :myshixun_members, :dependent => :destroy
|
|
has_one :repository
|
|
has_many :games, :dependent => :destroy, :order => "games.id ASC"
|
|
belongs_to :shixun
|
|
has_one :shixun_modify, :dependent => :destroy
|
|
has_many :student_works
|
|
|
|
def total_stage
|
|
self.games.count
|
|
end
|
|
|
|
def current_stage
|
|
game = self.games.where(:status => 0).first
|
|
position = game.blank? ? 1 : game.challenge.try(:position)
|
|
return position
|
|
end
|
|
|
|
def done_time
|
|
time = ""
|
|
if self.status == 1
|
|
time = self.games.order("end_time desc").first.try(:end_time)
|
|
end
|
|
time
|
|
end
|
|
|
|
def total_spend_time
|
|
time = 0
|
|
self.games.each do |game|
|
|
if game.status == 2
|
|
time += (game.end_time -game.open_time).to_i > 0 ? (game.end_time -game.open_time).to_i : 0
|
|
end
|
|
end
|
|
time
|
|
end
|
|
|
|
def total_score
|
|
score = 0
|
|
self.games.each do |game|
|
|
if game.status == 2
|
|
score += game.final_score
|
|
end
|
|
end
|
|
score
|
|
end
|
|
|
|
# id 转换成 identifier
|
|
def to_param
|
|
identifier
|
|
end
|
|
|
|
# 当前任务:一个实训中只可能一个未完成任务(status 0或1只会存在一条记录)
|
|
# status:0 可以测评的,正在测评的
|
|
# 如果都完成,则当前任务为最后一个任务
|
|
def current_task
|
|
games = self.games
|
|
current_game = games.select{|game| game.status==1 || game.status==0}.first
|
|
if current_game.blank?
|
|
passed_games = games.select{|game| game.status==2}
|
|
current_game = passed_games.last
|
|
end
|
|
return current_game
|
|
end
|
|
|
|
def owner
|
|
User.find(self.user_id)
|
|
rescue ActiveRecord::RecordNotFound
|
|
render_404
|
|
end
|
|
end
|