在 has_many :through 和 has_and_belongs_to_many - "should" 或 "must" 之间进行选择
Choosing Between has_many :through and has_and_belongs_to_many - "should" or "must"
或者:"What happens if you decide wrong"
文档说:
You should use has_many :through if you need validations, callbacks,
or extra attributes on the join model.
但是“你应该使用”应该是“你必须使用”吗?
重点是,我们在联接 table 中有 一个属性 ,并且这个 被广泛讨论 。
那么如果我(我们)决定使用更简单的 HABTM 并且在一年内弹出友好属性会怎样?是否有可能访问它(更复杂,好吧),还是我们回去重新开始并重新设计?
这个问题的所有答案(而且有很多)- "HABTM or :through",或多或少很容易决定; "take this or the other".
我想知道如果我们决定错了如何纠正错误。
是不是,例如。可能 "push a model between",或者如何访问这个属性,如果它弹出?
还是从 :through 开始是更好的策略?确定
是的,可以将 HABTM 转换为 HMT。
连接 table 遵循 table + table 的命名约定,如 "developers_projects".
稍后,如果您想要创建关系 HMT,只需创建一个名为 DevelopersProject
的模型并将其用作连接 table。一样的table。但是你可以然后使用迁移来添加字段,并使用模型来添加验证等等
从 HMT 开始的优势在于您可以随意调用连接 table,但这并不是非常重要。
或者:"What happens if you decide wrong"
文档说:
You should use has_many :through if you need validations, callbacks, or extra attributes on the join model.
但是“你应该使用”应该是“你必须使用”吗?
重点是,我们在联接 table 中有 一个属性 ,并且这个 被广泛讨论 。
那么如果我(我们)决定使用更简单的 HABTM 并且在一年内弹出友好属性会怎样?是否有可能访问它(更复杂,好吧),还是我们回去重新开始并重新设计?
这个问题的所有答案(而且有很多)- "HABTM or :through",或多或少很容易决定; "take this or the other".
我想知道如果我们决定错了如何纠正错误。
是不是,例如。可能 "push a model between",或者如何访问这个属性,如果它弹出?
还是从 :through 开始是更好的策略?确定
是的,可以将 HABTM 转换为 HMT。
连接 table 遵循 table + table 的命名约定,如 "developers_projects".
稍后,如果您想要创建关系 HMT,只需创建一个名为 DevelopersProject
的模型并将其用作连接 table。一样的table。但是你可以然后使用迁移来添加字段,并使用模型来添加验证等等
从 HMT 开始的优势在于您可以随意调用连接 table,但这并不是非常重要。