2011-09-21 48 views
1

对不起,标题很不清楚 - 我只是不确定如何在不解释的情况下对问题进行描述。在Rails中只能有一个孩子的父模型?

我想用我的应用程序记录锻炼。我想锻炼表(我称之为家长),有基本信息,如日期和sub_workout_type_id

一个锻炼记录可以有一个心血管锻炼(一个模型)或力量锻炼(另一个模型)。

我的想法有3张桌子,而不是只有2个Cario锻炼模型和力量锻炼模型,我可以通过拉动锻炼记录拉动任何类型锻炼的饲料,然后根据需要深入挖掘。

也许有更多的ruby-ish方式来做到这一点?因为现在我不知道怎么说has_one_model_or_the_other。谢谢!

回答

2

我看到两个选项,你可以使用STI(单表继承):在这种情况下,你将有一个能够同时包含心血管模型或力量训练和一个类型的表。这只有在两种模式具有共同特征时才有效。

另一种解决方案是写类似

has_one :cardiovascular 
has_one :strength 

,然后使用验证来执行,只有其中的一个设置。

希望这会有所帮助。

+0

我喜欢使用STI的想法 - 我不知道这是可用的。我有一个问题是关于表现。假设cario有25个领域并且实力有25个 - 你会预测在一个表中查询花费更长时间还是效率更低?另外,我可以为每种类型编写迁移,就像我是普通模型一样吗?或者我可以只为锻炼书写迁移吗?对不起,1条评论有2个问题! – Rapture

+0

效率的差异可能不会引起注意,但它很容易找到一些真实世界的数字。迁移不是特定于模型的 - 任何迁移都可以包含任何信息,任何表,多个表等等。 –

+0

感谢@DaveNewton对此进行清理。我会给它一个! – Rapture

0

正如@nathanvda所说,STI可能是一个不错的选择。

如果您希望在模型中存储班级特定数据,可以查看Modeling inheritance with Ruby/Rails ORMs以查看该答案是否提供了关于如何为这种关系建模的任何建议。

请注意,这里的例子使用has_many's,但很多想法都是相似的。

相关问题