Description:
fixed bug: increament of number on old records in submission git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@98 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r46:c9ffe114dd77 - - 1 file changed: 3 inserted, 2 deleted

@@ -1,37 +1,37
1 1 class Submission < ActiveRecord::Base
2 2
3 3 belongs_to :language
4 4 belongs_to :problem
5 5 belongs_to :user
6 6
7 7 validates_presence_of :source
8 8 validates_length_of :source, :maximum => 100_000, :allow_blank => true, :message => 'too long'
9 9 validates_length_of :source, :minimum => 1, :allow_blank => true, :message => 'too short'
10 10 validate :must_specify_language
11 11 validate :must_have_valid_problem
12 12
13 - before_save :assign_latest_number
13 + before_save :assign_latest_number_if_new_recond
14 14
15 15 def self.find_last_by_user_and_problem(user_id, problem_id)
16 16 last_sub = find(:first,
17 17 :conditions => {:user_id => user_id,
18 18 :problem_id => problem_id},
19 19 :order => 'submitted_at DESC')
20 20 return last_sub
21 21 end
22 22
23 23 def self.find_all_last_by_problem(problem_id)
24 24 # need to put in SQL command, maybe there's a better way
25 25 Submission.find_by_sql("SELECT * FROM submissions " +
26 26 "WHERE id = " +
27 27 "(SELECT MAX(id) FROM submissions AS subs " +
28 28 "WHERE subs.user_id = submissions.user_id AND " +
29 29 "problem_id = " + problem_id.to_s + " " +
30 30 "GROUP BY user_id)")
31 31 end
32 32
33 33 def self.find_last_for_all_available_problems(user_id)
34 34 submissions = Array.new
35 35 problems = Problem.find_available_problems
36 36 problems.each do |problem|
37 37 sub = Submission.find_last_by_user_and_problem(user_id, problem.id)
@@ -90,30 +90,31
90 90 end
91 91
92 92 # validation codes
93 93 def must_specify_language
94 94 return if self.source==nil
95 95 self.language = Submission.find_language_in_source(self.source)
96 96 errors.add_to_base("must specify programming language") unless self.language!=nil
97 97 end
98 98
99 99 def must_have_valid_problem
100 100 return if self.source==nil
101 101 if self.problem_id!=-1
102 102 problem = Problem.find(self.problem_id)
103 103 else
104 104 problem = Submission.find_problem_in_source(self.source)
105 105 end
106 106 if problem==nil
107 107 errors.add_to_base("must specify problem")
108 108 elsif !problem.available
109 109 errors.add_to_base("must specify valid problem")
110 110 end
111 111 end
112 112
113 113 # callbacks
114 - def assign_latest_number
114 + def assign_latest_number_if_new_recond
115 + return if !self.new_record?
115 116 latest = Submission.find_last_by_user_and_problem(self.user_id, self.problem_id)
116 117 self.number = (latest==nil) ? 1 : latest.number + 1;
117 118 end
118 119
119 120 end
You need to be logged in to leave comments. Login now