Ruby on Railsアプリのモデルをセットアップしようとしていますが、モデルは非常に複雑です。正しい方法でアプローチしているかどうかはわかりません。Ruby onRailsガイド@guides.rubyonrails.orgを読むと、Active Recordの関連付けに関するかなり良い情報が得られますが、ある程度混乱することもあります。私が設定しようとしているのは、トーナメントをモデル化するものですが、従来のトーナメントではありません(GSLをフォローしている人がいる場合は、それをモデル化してみたいトーナメントです)。
トーナメントモデルには、次の情報が格納されています。
- 名前
- バナー(オンラインでホストされている画像へのURLのみ)
- マッププール(トーナメントで使用されているマップオブジェクトのコレクション)
- プレイヤー(このトーナメントに参加しているプレイヤーの数)
- 決勝までの32ラウンド(32、16、8、4、2ラウンド)
私が思いついたモデルは次のとおりです。トーナメント、マッププール、マップ、プレーヤー、レース(つまり、Protoss TerranまたはZerg)、チーム(つまり、プレーヤーが属するチーム)、Round_of_32、Round_of_16、Round_of_8、Round_of_4、Round_of_2、Group (ラウンドごとの試合のコレクション)、試合(プレーヤー間の試合ごとの情報を含むコレクション)、およびゲーム(マップと勝者を保持する)。アプリが開発されるにつれて、プレーヤーが複数のトーナメントに参加したり、マップがそれぞれのトーナメントの複数のマッププールに参加したりする場合でも、それぞれが独自のデータセットを持つトーナメントが増えていきます。
- トーナメントには、多数のマップを含むマッププールがあります
- トーナメントには複数のプレーヤーがいて、それぞれが異なるレースとチームに関連付けられています
- 32ラウンドには8つのグループがあり、それぞれに5つの試合があり、それぞれに3つのゲームがあります。
- 16ラウンドは32ラウンドに似ていますが、グループは4つしかありません。
- 8ラウンドは、それぞれ5ゲームの4試合のみです。
- 4ラウンドには2つの試合があり、それぞれに5つのゲームがあります
- 2ラウンドは1試合で、それぞれ7試合あります
これが私がこれまでに持っているものです:
TOURNAMENT
:league
:banner
has_one :map_pool
has_many :maps, :through => :map_pool
has_and_belongs_to_many :players
# has_many :rounds
has_one :ro32
has_one :ro16
has_one :ro8
has_one :ro4
has_one :ro2
MAP_POOL
belongs_to :tournament
has_many :maps
MAP
:name
belongs_to :map_pool
has_many :games
PLAYER
:name
belongs_to :race
belongs_to :team
has_and_belongs_to_many :tournaments
has_many :games
RACE
:type {"Protoss", "Terran", "Zerg"}
has_many :players
TEAM
:name
has_many :players
RO32
belongs_to :tournament
has_many :groups, :as => :round,
:limit => 8
RO16
belongs_to :tournament
has_many :groups, :as => :round,
:limit => 4
RO8
belongs_to :tournament
has_many :matches, :as => :matchup,
:limit => 4
RO4
belongs_to :tournament
has_many :matches, :as => :matchup,
:limit => 2
RO2
belongs_to :tournament
has_many :matches, :as => :matchup,
:limit => 1
GROUP
:name
belongs_to :round, :polymorphic => true
has_many :matchups, :as => :matchup
MATCH
:type {"bo3", "bo5", "bo7"}
has_many :games
belongs_to :matchup, :polymorphic => true
GAME
belongs_to :match
has_one :map
has_one :player
何かが足りない、または何かを間違って使用していますか?
編集:私が個々のラウンドごとに別々のモデルを持っている理由は、ラウンド32/16がラウンド8/4/2と異なる方法のためです。これが私が抱えている問題を説明するかもしれないサンプルデータのセットです:
Round of 32:
Group A:
Match 1: P1 vs P2
Game 1
Game 2
Game 3
Match 2: P3 vs P4
Game 1
Game 2
Game 3
Winners Match: P1 (winner match 1) vs P4 (winner match 2)
Game 1
Game 2
Game 3
Losers Match: P2 (loser match 1) vs P3 (loser match 2)
Game 1
Game 2
Game 3
Tiebreak Match: P4 (loser of winners match) vs P2 (winner of losers match)
Game 1
Game 2
Game 3
[etc. Group B through Group H]
Round of 16:
[similar to Round of 32 but only groups A through D]
Round of 8:
Match 1: P1 vs P2
Game 1
Game 2
Game 3
Game 4
Game 5
Match 2: P3 vs P4
Game 1
Game 2
Game 3
Game 4
Game 5
Match 3: P5 vs P6
Game 1
Game 2
Game 3
Game 4
Game 5
Match 4: P7 vs P8
Game 1
Game 2
Game 3
Game 4
Game 5