我有'球員'和'比賽'的模型。每場比賽記錄有兩名球員,一名贏家和一名失敗者。有兩場比賽的球員的正確的滑軌協會是什麼
什麼將是一個很好的Rails活動記錄協會呢?
Player
name
Match
winner_id (this is a player ID)
loser_id (this is a player ID)
我希望能夠獲得一名球員的勝利數,並獲得所有從未參加過比賽的球員。
我有'球員'和'比賽'的模型。每場比賽記錄有兩名球員,一名贏家和一名失敗者。有兩場比賽的球員的正確的滑軌協會是什麼
什麼將是一個很好的Rails活動記錄協會呢?
Player
name
Match
winner_id (this is a player ID)
loser_id (this is a player ID)
我希望能夠獲得一名球員的勝利數,並獲得所有從未參加過比賽的球員。
你可以做任何
都有一個
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
在你的「has_one」例子中,「玩家」模型中有什麼關聯? – 2014-12-08 05:33:05
已更新。再說一遍,這比任何設計都更適合設計。你必須做出最適合你的決定。 – Momer 2014-12-08 16:07:45
瞭解更多玩家has_many:比賽。 比賽belongs_to的:冠軍,CLASS_NAME:「玩家」 belongs_to的:寬鬆,CLASS_NAME:「玩家」,也許 – argentum47 2014-12-08 05:04:29
如果您的問題已經解決了,請選擇一個答案。 – Momer 2014-12-09 15:34:01