Starting to fill in tournament ranking bits
This commit is contained in:
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…
Reference in New Issue
Block a user