我在has_many :through
(HMT)与has_and_belongs_to_many
(HABTM)之间听到了很多关注。 This post涵盖了它的大部分好处。好的,HMT
确实比HABTM
有一些真正的好处。但是,我想知道什么时候应该知道我应该使用HMT
而不是HABTM
?通常情况下,我认为普通的HABTM
关联可以解决我的问题(加上更轻的数据和设计)而不必使用HMT
的时髦好处。但关于HMT
的嗡嗡声使我想要怀疑我是否做出了选择HABTM
的正确决定。我怎么能确定我做出了正确的决定?
答案 0 :(得分:4)
有用吗?然后你做出了正确的决定。
如果没有完全映射出你的数据库关系,那么从长远来看这可能不是最好的决定。但是,这不是一个困扰您的项目整个开发期的决定。如果您按照说明设置HABTM关系,那么迁移到HMT关系是相当简单的。
这是需要做的事情。
就个人而言,我更喜欢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(例如,为关系添加更多数据)