首页 > 解决方案 > 设计:使用默认关联对象初始化对象

问题描述

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

要求

我想不出一个看起来最佳的设计:

解决方案 1

  1. 使用默认列表default_teams播种一个类。teams
  2. 对于每一个新的tournament;遍历default_teams复制属性以创建新的teams

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

解决方案 2

  1. 将一个tournament标记为默认值并teams关联默认值。
  2. 为每个新的.clone thistournament及其关联tournament

这似乎有更多的可能出错。我需要从视图中排除这个默认值,并在同一模型中以tournament不同的方式管理其权限。tournaments一个模型基本上有两个工作,这似乎也不完全正确。

问题

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

标签: ruby-on-rails

解决方案


我希望我的问题是正确的。什么是静态团队列表?它只是纯文本还是它们存在于数据库中?

沿着这些思路怎么样

before_create :assign_default_teams

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

由于您提到初始化对象,您也可以使用after_initialize而不是before_create. 确保为您的用例选择正确的回调


推荐阅读