设计:使用默认关联对象初始化对象

时间:2018-07-18 09:45:49

标签: ruby-on-rails

我几乎可以肯定这已经回答了,但是我找不到它!

要求

  • 我有两个班,tournamentsteams

  • 每个tournament对象has_many teams

  • 大多数tournaments的{​​{1}}都非常相似,所以...

  • 我想用从静态列表中提取的默认集teams初始化每个新的tournament

  • 默认列表可能会更改,但这只会影响新的teams

我无法提出一个看起来最佳的设计:

解决方案1 ​​

  1. 具有一个tournaments类,该类带有默认的default_teams列表。
  2. 对于每个新的teams;遍历tournament复制属性以创建新的default_teams

这似乎很容易做到,但是维护两个基本相同的模型似乎并不那么干。

解决方案2

  1. 已将teams标记为默认值,并关联了默认值tournament
  2. 为每个新的teams克隆此tournament及其关联。

这似乎有更多出错的余地。我需要从视图中排除此默认tournament并以与同一模型中其他tournament不同的方式管理其权限。一个模型本质上有两个工作,而且看起来也不是很正确。

问题

是否有更好的方法?我觉得这不是一个罕见的情况,但是我找不到其他人在讨论最佳做法。

1 个答案:

答案 0 :(得分:1)

我希望我的问题正确。什么是静态球队名单?仅仅是纯文本还是它们存在于数据库中?

沿着这些思路怎么样

before_create :assign_default_teams

def assign_default_teams
  self.teams = [team_id1, team_id2, ...]
end

由于您提到了初始化对象,因此也可以使用after_initialize代替before_create。确保为您的用例选择正确的callback