我有一个Invite模型,它有n + m个属性(位置,时间等)。当接受邀请时,将创建一个Event对象,其中包含从Invite模型复制的n个属性及其自身的k个属性。我想避免重复n个属性。
我应该如何在Rails中建模这种关系?
谢谢。
答案 0 :(得分:1)
不要考虑属性,考虑对象以及它们在现实世界中的模型(代表)。还要考虑对象的生命周期
仅仅因为存在重叠并不意味着您想要消除它。
如果你真的想要,你可以说每个事件belongs_to
都是邀请。 (并且n
属性仅存储在拥有的Invite模型中。)
但在您执行此操作之前,请确保业务逻辑确保Invites在达到accepted
状态后永远不会更改。
已添加复制n
属性的另一个原因:假设稍后为实际事件更改了这些属性 - 您希望属性位于事件模型中。如果您有一组Invite和Event的数据,那么您可以说这些属性是从Invite输入时开始修复的。
但这可能与现实世界不符。如果您确实更改了值,那么在输入邀请时,您将丢失最初值的信息。