2017-06-24 3 views
1

たとえば、私は基本的なチェッカーゲームをルビーのレールに書いています。複数のモデルを複数のモデルにリンクする

私はPlayerモデルとゲームモデルを持っています。各ゲームには2人のプレイヤーがいます。各プレイヤーは複数のゲームをプレイすることができます(複数のゲームをプレイできるため)。

2人のユーザーがゲームに所属する最も効果的な方法は何ですか?私はplayer_one_id:integerplayer_two_id:integerのようなフィールドを作ることができますが、それはちょっとハッキリです。そして、プレーヤーが現在どんなゲームを行っているかを調べることは効率的ではありません。

これを行うにはどうすればよいですか?理想的にはそれらがきれいに保存されていると私は簡単にプレーヤーが現在である何試合かを確認することができ

答えて

3

私はあなたが(すなわちplayer_one_idplayer_two_id)を提案して2つのプレーヤーの列を使用して、このようなモデルの関係を設定します:。

class Game < ApplicationRecord 
    belongs_to :player_one, class: "Player" 
    belongs_to :player_two, class: "Player" 
end 

class Player < ApplicationRecord 
    has_many :games 
end 

ハッキーとは思えません。常にゲームごとに2人のプレイヤーがいるためです。 は、プレイヤーがに現在ある、あなたはこのようにそれを何ができるかゲーム見上げについては

Game.where("player_one_id = ? OR player_two_id = ?", player_id, player_id) 
+0

これはかなりスムーズですね!私は、ああ、行こう!助けてくれてありがとう –

-1

あなたが "player_one" テーブルを持っている...

player_one 
----------- 
(PK) player_one_id 
EngineerName 

そして、 「player_two」テーブル...

player_two 
--------- 
(PK) player_two_id 
player_name 

ここで、 player_oneplayer_two両方のIDを参照する「ゲーム」(または類似)...

Games 
------------------ 
(PK) GameId 
(FK) player_one_id 
(FK) player_two_id 

だから方法、あなたは別に、すべてのプレーヤーの一つ詳細とプレイヤー二つの細部を維持し、ONLY使用してそれらをリンクIdsは...リンクテーブルは

player_one | player_two 
------------+---------- 
     1  | 1 
     1  | 2 
     1  | 3 
     2  | 1 
     2  | 2 
     2  | 3 

これがベストプラクティスですし、それはあなたの拡大のための最も機会を与える...このようになります。