第一次在 SO 上发帖,如果我没有正确遵循指南,我深表歉意。
我正在 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
这个想法是,联盟可以由球员组成的球队组成,也可以由没有球队的个人球员组成。我目前在 Leagues 表中有一个 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, as: home_matchable”和“has_many :away_matches, as: away_matchable”添加到 Teams 和 Players。
我发现目前只有有限数量的视图和控制器,我似乎需要定期检查联盟是针对球队还是球员,所以有很多“如果 League_type == 'teams' 做其他事情做其他事情”我的代码中的语句感觉有点难看。特别是如果在赛道上我决定添加“双打”类型,例如,他们会变成“如果'团队'然后其他如果'球员'然后其他”等。
抱歉,这比我预期的要长得多,非常感谢任何帮助!