Ruby on rails 在Rails中为游戏比赛建模的好方法?

Ruby on rails 在Rails中为游戏比赛建模的好方法?,ruby-on-rails,model,Ruby On Rails,Model,我正在尝试在Rails中创建一个匹配类型的模型。比赛需要跟踪以下各项: 两名球员 胜利者 没有分数之类的。我可以看到这样做是因为3个独立的与玩家有一个关系,但这对我来说似乎有点骇人听闻。有更好的方法吗?两个字段如何: class GameMatch < ActiveRecord::Base belongs_to :winner, :class_name => 'Player' belongs_to :loser, :class_name => 'Player'

我正在尝试在Rails中创建一个匹配类型的模型。比赛需要跟踪以下各项:

  • 两名球员
  • 胜利者

没有分数之类的。我可以看到这样做是因为3个独立的
与玩家有一个
关系,但这对我来说似乎有点骇人听闻。有更好的方法吗?

两个字段如何:

class GameMatch < ActiveRecord::Base

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

end
classgamematch“玩家”
属于:失败者,:class\u name=>“玩家”
终止
如果您需要在游戏完成前将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
classgamematch“player”
属于:客场球员:class\u name=>“球员”
def赢家
赛尔夫[家乡]?主场球员:客场球员
终止
def赢家=(玩家)
赛尔夫[主场赢]=球员==主场球员
终止
终止

当然,你必须在那里进行一些处理,以确保胜利者玩了游戏,而不是决定宣布胜利的旁观者。

两个场地如何:

class GameMatch < ActiveRecord::Base

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

end
classgamematch“玩家”
属于:失败者,:class\u name=>“玩家”
终止
如果您需要在游戏完成前将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
classgamematch“player”
属于:客场球员:class\u name=>“球员”
def赢家
赛尔夫[家乡]?主场球员:客场球员
终止
def赢家=(玩家)
赛尔夫[主场赢]=球员==主场球员
终止
终止

当然,你必须在那里进行一些处理,以确保胜利者玩了游戏,而不是决定宣布胜利的旁观者。

描述得非常好。我想补充一点,如果您需要存储一系列值,如圆形结果、点击数等,您可以使用serializable在您的模型中存储哈希值。很好的调用,为了优化表,您可以将
:winner
转换为布尔值。见鬼,最好改变答案。描述得很好。我想补充一点,如果您需要存储一系列值,如圆形结果、点击数等,您可以使用serializable在您的模型中存储哈希值。很好的调用,为了优化表,您可以将
:winner
转换为布尔值。见鬼,还是改变答案为好。