2

SO の最初の投稿なので、ガイドラインに正しく従っていない場合はお詫び申し上げます。

私は Rails でオンライン リーグ管理アプリケーションを設計していますが、データベース設計でいくつかの問題に遭遇しました。これは、今持っているものを先に進めて、後で機能しないことがわかるよりも、今すぐ整理したいものです。

現在、私は次のモデルを持っています:

class League < ActiveRecord::Base
    has_many :teams
    has_many :players
end

class Team < ActiveRecord::Base
    belongs_to :league
    has_many :players
end

class Player < ActiveRecord::Base
    belongs_to :league
    belongs_to :team
end

リーグは、プレイヤーのチームで構成することも、チームを持たない個々のプレイヤーのみで構成することもできます。私は現在、リーグがチーム向けかプレイヤー向けかを識別する League_type 属性を Leagues テーブルに持っています。私の最初の質問は、これがこの状況を処理する良い方法であるかどうかです。

これが問題であると思われる理由の 1 つは、マッチを作成しようとするときです。これは、プレイヤーまたはチームで構成されるためです。当初は、home_id 属性と away_id 属性を備えた Match モデルを作成し、リーグの種類に応じて player_ids または team_ids のいずれかを設定することを考えていましたが、それは私にとって良い設計とは思えません。ホームとアウェイのフィールドをポリモーフィックにすることを検討しましたが、おそらくそれが最善の方法でしょうか? 例えば。

class Match < ActiveRecord::Base
    belongs_to :home_matchable, polymoprhic: true
    belongs_to :away_matchable, polymoprhic: true
end

そして、「has_many :home_matches, as: home_matchable」と「has_many :away_matches, as: away_matchable」をチームとプレイヤーに追加します。

現時点で私が持っているビューとコントローラーの数が限られているだけで、リーグがチーム向けかプレイヤー向けかを定期的に確認する必要があるようです。少し醜い感じがする私のコードのステートメント。特に、たとえば「ダブルス」タイプを追加したいと決めた場合は特に、「if 'teams' then else if 'players' then else」などになります。

申し訳ありませんが、これは私が予想していたよりもずっと長くなってしまいました。

4

1 に答える 1

1

デフォルトでプレイヤーがチームに所属することを強制しないのはなぜですか? DB でプレイヤーを作成すると、自動的にチームが作成され、彼が唯一のメンバーになります。

これらのチームをブール値でマークして、これらがマルチプレーヤー チームではないことを示すこともできます。

この方法では、マッチを作成するときにチームのみを扱います。私は個人的にポリモーフィックなアプローチが好きではありません。関連付けにアクセスしているときに異なるモデルを操作するのが難しくなる可能性があります。

于 2012-07-27T13:48:04.000 に答える