2011-06-21 10 views
0

私はちょうどRailsで遊んでいます。私は小さなカードゲームアプリを作っています。私は私の外来キーの設定を把握していないようです。
は、私は4つのオブジェクトを持っていると言う:
- ゲーム
- プレーヤー
- ハンド
- カードRails外部キー設定の質問

ゲームは、多くのカードを持っている多くの手を持っている多くのプレーヤーを持っています。しかし、カードはハンド、プレイヤー、ゲームから独立しています。
たとえば、データベースに6枚のカードがあります(1〜6)。カード3は同じゲームで2人のプレーヤーの手に入る可能性があります。

どうすればこの鍵を設定できますか?私はそれを単純化するために "CardInHand"のための別のオブジェクトを作成する必要がありますか?

答えて

2

カードと手の関係は、古典的なHas And Belongs To Many(HABTM)です。 HABTMの関係を持つときは、ペアリングを管理するテーブルが必要です(hands_cards、つまりIDのペアのみ)が、対応するモデルは必要ありません。

(あなたがhands_cardsテーブルを自分で生成するための移行を作成する必要がありますことに注意してください。それが自動的に作成されません。)

あなたが言うようにあなたが別のモデルを作成するために、オプションを持っています手にカードがあることを表現する - これはhas_many :throughの関係ですが、具体的なオブジェクトとしてその関係をモデル化する特別な理由がある場合にのみ行います。

1

標準のBest Practice for Railsは、データベース内の外部キーを使用するのではなく、モデルの検証を使用してデータの正確性を保証します。

もう1つの答えは、あなたが設定したいものについて説明しています。

+4

これは間違った答えです - Railsは絶対に外部キーを使用します。外部キー*制約を作成しません。重要な違い。私のハンドテーブルにPlayer IDがある場合、データベースがPlayer IDが有効であることを強制していなくても、それは外部キーです。 –

+0

あなたは正しいと思います。私は混乱しているように見えますが、それは彼が話していたものです。私の悪い。 –