【问题标题】:Parent Model that can only have one child in Rails?在 Rails 中只能有一个孩子的父模型?
【发布时间】:2011-09-21 19:20:01
【问题描述】:

抱歉,标题不太清楚 - 我只是不确定如何在不解释的情况下表达这个问题。

我想用我的应用记录锻炼。我想要一个包含日期和 sub_workout_type_id 等基本信息的锻炼表(我称之为父母)

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

我对拥有 3 张桌子而不仅仅是 2 个 Cario 锻炼模型和力量锻炼模型的想法是,我可以通过拉动锻炼记录来提取任何类型的锻炼的提要,然后根据需要进行更深入的挖掘。

也许有更红宝石的方式来做到这一点?因为现在我不知道如何说 has_one_model_or_the_other。谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

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

    另一种解决方案是写类似的东西

    has_one :cardiovascular
    has_one :strength
    

    然后使用验证来强制只设置其中一个。

    希望这会有所帮助。

    【讨论】:

    • 我喜欢使用 STI 的想法 - 我不知道这是可用的。我的一个问题是关于性能的。假设 cario 有 25 个字段,而strength 有 25 个 - 您会预见查询在一张表中需要更长的时间还是效率更低?另外,我可以像普通模型一样为每种类型编写迁移吗?或者我只能为锻炼编写迁移吗?抱歉 1 条评论中有 2 个问题!
    • 效率差异可能不会很明显,但很容易找出一些真实世界的数字。迁移不是特定于模型的——任何迁移都可以包含任何信息,适用于任何表、多个表等。
    • 感谢@DaveNewton 澄清这一点。我试试看!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2017-08-16
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多