ruby-on-rails - 设计:使用默认关联对象初始化对象
问题描述
我几乎可以肯定这已经得到了回答,但我找不到它!
要求
我有两个班,
tournaments
和teams
。每个
tournament
对象has_many
teams
大多数
tournaments
会有非常相似的teams
所以......我想用一组从静态列表中提取
tournament
的默认值来初始化每个新的。teams
默认列表可能会更改,但这
tournaments
只会影响新列表。
我想不出一个看起来最佳的设计:
解决方案 1
- 使用默认列表
default_teams
播种一个类。teams
- 对于每一个新的
tournament
;遍历default_teams
复制属性以创建新的teams
这似乎很容易做到,但维护两个基本相同的模型似乎并不十分干燥。
解决方案 2
- 将一个
tournament
标记为默认值并teams
关联默认值。 - 为每个新的.clone this
tournament
及其关联tournament
。
这似乎有更多的可能出错。我需要从视图中排除这个默认值,并在同一模型中以tournament
不同的方式管理其权限。tournaments
一个模型基本上有两个工作,这似乎也不完全正确。
问题
有没有更好的方法来做到这一点?我觉得这不是一个罕见的情况,但我找不到其他人讨论它的最佳实践。
解决方案
我希望我的问题是正确的。什么是静态团队列表?它只是纯文本还是它们存在于数据库中?
沿着这些思路怎么样
before_create :assign_default_teams
def assign_default_teams
self.teams = [team_id1, team_id2, ...]
end
由于您提到初始化对象,您也可以使用after_initialize
而不是before_create
. 确保为您的用例选择正确的回调。
推荐阅读
- c# - SignalR 不适用于 .net 核心 WPF 应用程序
- python - 如何使用 sparql 查询从 dbpedia 获取导演的电影列表
- audiokit - AudioKit v5 振荡器频率斜坡问题
- docker - 使用 dockerfile 从 github 克隆 git repo
- excel - 如何创建仅包含上个月数据的度量?
- python - 计算时间序列数据的统计指标
- r - 在 KNN 上具有两个设置的嵌套交叉验证
- python - ValueError:Layer 需要 2 个输入,但在训练 CNN 时收到 1 个输入张量
- powershell - Powershell从for循环导出csv
- sql-server - Databasemail 适用于实时环境,但不适用于同一 SQL Server 实例上的测试环境