class AddNumberToSubmissions < ActiveRecord::Migration def self.up add_column :submissions, :number, :integer # add number field for all records Submission.reset_column_information last_user_id = nil last_problem_id = nil current_number = 0 Submission.find(:all, :order => 'user_id, problem_id, submitted_at').each do |submission| if submission.user_id==last_user_id and submission.problem_id==last_problem_id current_number += 1 else current_number = 1 end submission.number = current_number submission.save last_user_id = submission.user_id last_problem_id = submission.problem_id end add_index :submissions, [:user_id, :problem_id, :number], :unique => true end def self.down remove_index :submissions, :column => [:user_id, :problem_id, :number] remove_column :submissions, :number end end