2

第一次在 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' 做其他事情做其他事情”我的代码中的语句感觉有点难看。特别是如果在赛道上我决定添加“双打”类型,例如,他们会变成“如果'团队'然后其他如果'球员'然后其他”等。

抱歉,这比我预期的要长得多,非常感谢任何帮助!

4

1 回答 1

1

为什么不强制玩家默认加入团队?在 DB 中创建玩家时,您会自动为他创建一个团队并让他成为唯一的成员。

您还可以用布尔值标记这些团队,告诉您这些不是多人团队。

This way, you'd only deal with teams when creating Matches. I personally don't like the polymorphic approach, it can become tricky to manipulate different Models while accessing your associations.

于 2012-07-27T13:48:04.000 回答