Starting to fill in tournament ranking bits

cat-town
Dan Buch 13 years ago
parent a1aa03451f
commit b31926f16f

@ -8,7 +8,7 @@ class MashesController < ApplicationController
alias_method :show, :redirect_to_new alias_method :show, :redirect_to_new
def new def new
@map_a, @map_b = Map.rand(2) @map_a, @map_b = Map.pair
@mash = Mash.new( @mash = Mash.new(
:requester => request.remote_ip, :requester => request.remote_ip,

@ -6,8 +6,39 @@ class Map < ActiveRecord::Base
self.find_or_initialize_by_name(city_name).save! self.find_or_initialize_by_name(city_name).save!
end end
def self.rand(count = 2) def self.pair
self.find(:all, :order => 'RANDOM()', :limit => count) if Mash.count == 0
self.all(:order => 'RANDOM()', :limit => count)
else
first_conditions = <<-SQL
NOT EXISTS (
SELECT * FROM `mashes`
WHERE `winner` = `maps`.`id`
)
SQL
second_conditions = <<-SQL
`maps`.`id` != :first_id
AND (
SELECT COUNT(*) FROM `mashes`
WHERE `winner` = :first_id
) = (
SELECT COUNT(*) FROM `mashes`
WHERE `winner` = `maps`.`id`
)
SQL
first = self.all(
:order => 'RANDOM()',
:limit => 1,
:conditions => [first_conditions]
).first
second = self.all(
:order => 'RANDOM()',
:limit => 1,
:conditions => [second_conditions, {:first_id => first.id}]
).first
[first, second]
end
end end
def self.import(csv_filename) def self.import(csv_filename)
@ -22,4 +53,24 @@ class Map < ActiveRecord::Base
end end
end end
end end
def >(other)
self.points > other.points
end
def <(other)
self.points < other.points
end
def ==(other)
self.points == other.points
end
def rounds
Mash.count(:conditions => ['map_a = :id OR map_b = :id', {:id => self.id}])
end
def points
Mash.count(:conditions => ['winner = ?', self.id])
end
end end

@ -5,9 +5,12 @@ class CreateMaps < ActiveRecord::Migration
t.timestamps t.timestamps
end end
add_index :maps, :name
end end
def self.down def self.down
drop_table :maps drop_table :maps
remove_index :maps, :name
end end
end end

@ -8,9 +8,12 @@ class CreateMashes < ActiveRecord::Migration
t.timestamps t.timestamps
end end
add_index :mashes, :winner
end end
def self.down def self.down
drop_table :mashes drop_table :mashes
remove_index :mashes, :winner
end end
end end

@ -17,6 +17,8 @@ ActiveRecord::Schema.define(:version => 20120304164625) do
t.datetime "updated_at" t.datetime "updated_at"
end end
add_index "maps", ["name"], :name => "index_maps_on_name"
create_table "mashes", :force => true do |t| create_table "mashes", :force => true do |t|
t.string "requester", :null => false t.string "requester", :null => false
t.integer "map_a", :null => false t.integer "map_a", :null => false
@ -26,4 +28,6 @@ ActiveRecord::Schema.define(:version => 20120304164625) do
t.datetime "updated_at" t.datetime "updated_at"
end end
add_index "mashes", ["winner"], :name => "index_mashes_on_winner"
end end

Loading…
Cancel
Save