2011-04-01 38 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