我正在努力寻找与团队相关的游戏模型的最佳方式。
最终目标是能够调用以下内容:
@game.winner
@game.loser
@team.games
前两个关系正在发挥作用,但游戏不是。使用has_many(见下文),我得到ERROR: column games.team_id does not exist
我通常会使用与:foreign_key => winner_id
相同的任何内容来处理,但我如何检查winner_id
和{{1} }?
是团队模型中创建方法的唯一选择:
loser_id
到目前为止,我正在做的是:
def games
won = Game.where(:winner => id)
lost = Game.where(:loser => id)
won + lost
end
答案 0 :(得分:2)
你没有多说这个问题。但我认为你工作太辛苦了。如果一个团队可以玩几个游戏而一个游戏包含多个团队,那么你需要多对多的关系。这需要第三个表,最佳实践是has_many :through
关系。它看起来像:
class Game < ActiveRecord::Base
has_many :teams, through: assignment
has_one :winner, class_name: 'Team', through: :assignment, order: 'score DESC'
has_one :loser, class_name: 'Team', through: :assignment, order: 'score ASC'
end
class Team
has_many :games, through: :assignment
end
class Assignment < ActiveRecord::Base
belongs_to :game
belongs_to :team
end
现在您拥有赢家和输家属性,但您不需要使用自己的方法为团队计算游戏。只需说出team.games.count
,同样game.teams
就是指派给游戏的团队。