diff --git a/app/controllers/leaderboard_controller.rb b/app/controllers/leaderboard_controller.rb
index 3ba0a06..2bdcd59 100644
--- a/app/controllers/leaderboard_controller.rb
+++ b/app/controllers/leaderboard_controller.rb
@@ -1,5 +1,5 @@
class LeaderboardController < ApplicationController
def index
- @players = Player.order(purse: :desc)
+ @players = Player.where(main_player_id: nil).order(purse: :desc)
end
end
diff --git a/app/models/player.rb b/app/models/player.rb
index 1bc55b4..04f1986 100644
--- a/app/models/player.rb
+++ b/app/models/player.rb
@@ -1,2 +1,43 @@
class Player < ApplicationRecord
+ # A Player can be an alt of another player (the main)
+ belongs_to :main_player, class_name: "Player", optional: true, foreign_key: "main_player_id"
+
+ # A Player can have multiple alts
+ has_many :alternate_players, class_name: "Player", foreign_key: "main_player_id"
+
+ validate :no_circular_references
+
+ def total_wins
+ w = self.wins
+ alternate_players.each { |alt|
+ w += alt.wins
+ }
+ w
+ end
+
+ def total_losses
+ l = self.losses
+ alternate_players.each { |alt|
+ l += alt.losses
+ }
+ l
+ end
+
+ def total_purse
+ p = self.purse
+ alternate_players.each { |alt|
+ p += alt.purse
+ }
+ p
+ end
+
+ def alt?
+ self.main_player
+ end
+
+ def no_circular_references
+ if main_player_id.present? && (main_player.main_player== self)
+ errors.add(:main_account, "circular reference")
+ end
+ end
end
diff --git a/app/views/leaderboard/index.html.erb b/app/views/leaderboard/index.html.erb
index 216ecc2..f997bec 100644
--- a/app/views/leaderboard/index.html.erb
+++ b/app/views/leaderboard/index.html.erb
@@ -1,19 +1,19 @@
Force Kin Gamba Leaderboard
+<% if @players.any? %>
Gambalord
<%= @players.first.name %>
- <%= @players.first.purse %>
+ <%= @players.first.total_purse %>
Gumbalord
<%= @players.last.name %>
- <%= @players.last.purse %>
+ <%= @players.last.total_purse %>
-<% if @players.any? %>
<% else %>
-
No Players!
+
No Players!
<% end %>
diff --git a/db/migrate/20250126011348_add_main_player_id_to_players.rb b/db/migrate/20250126011348_add_main_player_id_to_players.rb
new file mode 100644
index 0000000..44c54db
--- /dev/null
+++ b/db/migrate/20250126011348_add_main_player_id_to_players.rb
@@ -0,0 +1,6 @@
+class AddMainPlayerIdToPlayers < ActiveRecord::Migration[8.0]
+ def change
+ add_column :players, :main_player_id, :integer
+ add_index :players, :main_player_id
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index b8c7f3a..784a570 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema[8.0].define(version: 2025_01_24_201602) do
+ActiveRecord::Schema[8.0].define(version: 2025_01_26_011348) do
create_table "api_keys", force: :cascade do |t|
t.string "key"
t.string "client"
@@ -39,5 +39,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_01_24_201602) do
t.integer "purse"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.integer "main_player_id"
+ t.index ["main_player_id"], name: "index_players_on_main_player_id"
end
end
diff --git a/db/seeds.rb b/db/seeds.rb
deleted file mode 100644
index 4fbd6ed..0000000
--- a/db/seeds.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file should ensure the existence of records required to run the application in every environment (production,
-# development, test). The code here should be idempotent so that it can be executed at any point in every environment.
-# The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup).
-#
-# Example:
-#
-# ["Action", "Comedy", "Drama", "Horror"].each do |genre_name|
-# MovieGenre.find_or_create_by!(name: genre_name)
-# end