我怎么能确定选择HABTM而不是has_many:through更合适?

时间:2009-11-12 05:27:35

标签: ruby-on-rails activerecord associations

我在has_many :through(HMT)与has_and_belongs_to_many(HABTM)之间听到了很多关注。 This post涵盖了它的大部分好处。好的,HMT确实比HABTM有一些真正的好处。但是,我想知道什么时候应该知道我应该使用HMT而不是HABTM?通常情况下,我认为普通的HABTM关联可以解决我的问题(加上更轻的数据和设计)而不必使用HMT的时髦好处。但关于HMT的嗡嗡声使我想要怀疑我是否做出了选择HABTM的正确决定。我怎么能确定我做出了正确的决定?

4 个答案:

答案 0 :(得分:4)

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

如果没有完全映射出你的数据库关系,那么从长远来看这可能不是最好的决定。但是,这不是一个困扰您的项目整个开发期的决定。如果您按照说明设置HABTM关系,那么迁移到HMT关系是相当简单的。

这是需要做的事情。

  • 将名为id的主键添加到自动递增的连接表中,并为表中已有的项填写ids。
  • 为属于关系两侧的联接表创建连接模型
  • 将habtm声明替换为has_many:join_models和has_many:others,:through => :join_models

就个人而言,我更喜欢HMT,但我的大多数联合模型都需要跟踪的不仅仅是关联。

P.S。那篇博客文章已经过时了。 HMT现在支持代理集合。

答案 1 :(得分:3)

如果你100%确定你永远不需要在关联表中添加另一个字段,那么HABTM就可以了。如果现在不需要第三个字段,但认为有可能有一天你可能,那么你应该选择HMT,因为你会有更大的灵活性。

答案 2 :(得分:0)

我认为您可能已经开始使用HABTM然后更改为has_many :through - 它只需要迁移重命名连接表并添加您想要的任何字段。然后,您只需创建与表对应的关联模型,应该工作。

答案 3 :(得分:0)

在开始创建HTM关系时花费额外的5分钟工作可以为您节省很多麻烦。一旦收集了大量数据,从HABTM迁移到HTM可能不是很简单。

我肯定会建议使用HTM并跳过HABTM。我所知道的情况可能不会强迫您使用HABTM。但是,大多数情况下,您将强制使用HTM(例如,为关系添加更多数据)