2011-06-21 107 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

Rails標準最佳實踐不是在db中使用外鍵,而是在模型上使用驗證來確保數據的正確性。

正如其他答案解釋了你想要設置的。

+4

我認爲這是一個誤導性的答案 - Rails絕對使用外鍵,它只是不會創建外鍵*約束*。一個重要的區別。如果我的手錶中有一個播放器ID,那是一個外鍵,即使我的數據庫沒有強制播放器ID有效。 –

+0

嗯,你是對的 - 看起來像我感到困惑,雖然這就是他正在談論的。我的錯。 –