2011-04-01 36 views
1

我想在Rails中找到匹配類型的模型。比賽需要牢記以下的軌跡:在Rails中建模遊戲匹配的好方法?

  • 兩位選手
  • 贏家

沒有得分或類似的東西。我可以看到這是作爲3個單獨的has_one與玩家的關係,但這對我來說似乎很難受。有沒有更好的方法來解決這個問題?

回答

4

如何只有兩個字段:

class GameMatch < ActiveRecord::Base 

    belongs_to :winner, :class_name => 'Player' 
    belongs_to :loser, :class_name => 'Player' 

end 

如果您需要輸入GameMatch到系統完成本場比賽之前,你必須有三個字段,但你可以或者細節像這樣:

class GameMatch < ActiveRecord::Base 

    belongs_to :home_player, :class_name => 'Player' 
    belongs_to :away_player, :class_name => 'Player' 

    def winner 
    self[:home_won] ? home_player : away_player 
    end  

    def winner=(player) 
    self[:home_won] = player == home_player 
    end 

end 

當然,你必須在那裏有一些處理,以確保獲獎者所扮演的遊戲,不是一個旁觀者是決定索賠的勝利。

+0

非常好描述。我想補充一點,如果你需要存儲一系列的值,比如圓的結果,命中和東西,你可以使用序列化在你的模型中存儲哈希值。 – Spyros 2011-04-01 19:53:48

+0

良好的調用,並優化表,你可以將':winner'轉換爲布爾值。哎呀,不妨改變這個答案。 – Kelly 2011-04-01 20:14:18