因此我非常抱歉,如果我没有正确地遵循指导方针,联盟应用程序的数据库结构
我正在设计一个Rails的在线联盟管理应用程序,并且在数据库设计中遇到了一些问题,我现在宁愿理清这些问题,而不是继续研究我所得到的结果,并发现它不会在以后工作。
目前,我有以下型号:
class League < ActiveRecord::Base
has_many :teams
has_many :players
end
class Team < ActiveRecord::Base
belongs_to :league
has_many :players
end
class Player < ActiveRecord::Base
belongs_to :league
belongs_to :team
end
的想法是,联盟既可以由玩家,或者只是个别球员的球队没有一支球队。我目前在联盟列表中有一个league_type属性,用于标识联盟是否适合球队或球员。我的第一个问题是这是否是处理这种情况的好方法?
这似乎可能是一个问题的原因之一是当我尝试创建一个匹配,因为它会由玩家或团队组成。我原本以为我会有一个带有home_id和away_id属性的Match模型,然后根据联盟类型使用player_ids或team_ids来填充这些模型,但是这对我来说并不是很好的设计。我曾考虑过将主场和客场做成多态,也许这是最好的方式?例如。
class Match < ActiveRecord::Base
belongs_to :home_matchable, polymoprhic: true
belongs_to :away_matchable, polymoprhic: true
end
,然后添加 “的has_many:home_matches,如:home_matchable” 和 “的has_many:away_matches,如:away_matchable” 对球队和球员。
我现在只是发现有限数量的视图和控制器,我似乎需要定期检查联盟是否适合球队或球员,所以有很多“如果league_type == '团队'在我的代码中做了其他事情做了别的事情“,这些代码感觉有点难看。特别是如果下了赛道,我决定增加一个“双打”类型,所以他们会变成“如果'队'然后其他如果'球员'然后其他”等。
对不起,这成了很多比我预想的更长,任何帮助都非常感谢!
这就是我最终这样做的结果。我给了联盟模型一个参与者类型属性,它标识联盟是否适合球员或球队。似乎运作良好。谢谢。 – mchapman17 2012-08-08 09:26:42