2014-12-08 68 views
0

我有'球員'和'比賽'的模型。每場比賽記錄有兩名球員,一名贏家和一名失敗者。有兩場比賽的球員的正確的滑軌協會是什麼

什麼將是一個很好的Rails活動記錄協會呢?

Player 
    name 

Match 
    winner_id (this is a player ID) 
    loser_id (this is a player ID) 

我希望能夠獲得一名球員的勝利數,並獲得所有從未參加過比賽的球員。

+0

瞭解更多玩家has_many:比賽。 比賽belongs_to的:冠軍,CLASS_NAME:「玩家」 belongs_to的:寬鬆,CLASS_NAME:「玩家」,也許 – argentum47 2014-12-08 05:04:29

+0

如果您的問題已經解決了,請選擇一個答案。 – Momer 2014-12-09 15:34:01

回答

1

你可以做任何

都有一個

class Match < ActiveRecord::Base 
    has_one :winner, class_name: "Player", foreign_key: "winner_id" 
    has_one :loser, class_name: "Player", foreign_key: "loser_id" 
end 

,或者,如果你想只更新是贏家/失敗者後,你可以不喜歡

有許多通過

class Match < ActiveRecord::Base 
    has_many :players, through: :match_players 

    # Pseudocode - not sure if this is the exact query you'd need, given players relies on the table which is being JOINed 
    def winner 
    players.joins(match_players: {winner: true}).load.first 
    end 
end 

其中您的MatchPlayers加入模型/表格將定義一些字段,標識贏家/輸家。

然而,隨着另一個選項有很多通過

class Match < ActiveRecord::Base 
    # http://guides.rubyonrails.org/association_basics.html#options-for-has-many-source 
    has_one :winner, through: :match_players, source: :player 
    # etc. 
end 

您可以在此做了一些不同的方式,採用不同的組織和方式,讓你需要的數據。

對於球員的典範,這取決於你想要什麼/需要爲您的應用。假設你使用類似第三種選擇的東西。玩家關聯可能看起來像

class Player < ActiveRecord::Base 
    has_many :matches, through: :match_players 
end 

這是基本的協會設計,我建議你閱讀我的回答底部的鏈接,你需要決定哪些(如果有的話)解決方案最適合您的使用案件。

您需要決定哪種類型的關聯最適合您的用例。您可以通過http://guides.rubyonrails.org/association_basics.html

+0

在你的「has_one」例子中,「玩家」模型中有什麼關聯? – 2014-12-08 05:33:05

+0

已更新。再說一遍,這比任何設計都更適合設計。你必須做出最適合你的決定。 – Momer 2014-12-08 16:07:45