代码之家  ›  专栏  ›  技术社区  ›  Chirantan

我怎么能确定选择HABTM比选择许多:通过更合适?

  •  1
  • Chirantan  · 技术社区  · 15 年前

    我听到很多嗡嗡声 has_many :through (HMT)VS has_and_belongs_to_many (HABTM)。 This post 涵盖了它的大部分好处。可以, HMT 当然有一些真正的好处 HABTM . 但是,我想知道的是,我应该什么时候知道我应该使用 HMT 结束 哈普姆 ?我经常在一个我相信普通香草的情况下 哈普姆 协会将解决我的问题(加上更轻的数据和设计),而不必使用 HMT . 但是关于 HMT 让我怀疑我是否做了正确的选择 哈普姆 . 我怎么能确定我做了正确的决定?

    4 回复  |  直到 15 年前
        1
  •  4
  •   EmFi    15 年前

    有效吗?然后你做出了正确的决定。

    如果没有完全映射出数据库关系,从长远来看这可能不是最好的决定。然而,这并不是一个在整个项目开发期间困扰您的决定。如果遵循了建立habtm关系的指导,那么迁移到hmt关系就相当简单。

    以下是需要做的事情。

    • 将名为id的主键添加到自动递增的联接表中,并为表中已有的项填写id。
    • 为属于关系双方的联接表创建联接模型
    • 将habtm声明替换为has-many:join-u模型,has-many:others,:through=>:join-u模型

    就我个人而言,我更喜欢hmt,但我的大多数加入模型需要跟踪的不仅仅是协会。

    那篇博文已经过时了。hmt现在支持代理集合。

        2
  •  3
  •   Andy Gaskell    15 年前

    如果您100%确定永远不需要向关联表中添加其他字段,那么habtm就可以了。如果现在不需要第三个字段,但认为有可能有一天你可能,那么你应该使用hmt,因为你将有更多的灵活性。

        3
  •  0
  •   Kyle Slattery    15 年前

    我想你可以先启动HABTM然后换成 has_many :through 实际上——它只需要一个迁移,重命名联接表并添加任何需要的字段。然后,您只需创建与表对应的关联模型,然后 应该 工作。

        4
  •  0
  •   Swanand    15 年前

    在开始创建HTM关系时只需额外花费5分钟的工作,就可以避免以后的许多麻烦。一旦收集了大量数据,从habtm迁移到htm可能不是很简单。

    我绝对建议你用HTM跳过HABTM。我所知道的任何情况都不能强迫你使用HABTM。然而,大多数情况下,将迫使您使用HTM(为例如添加更多数据到关系)