请通过关系说明has_and_belongs_to_many和has_many之间的区别。何时何地使用哪一个?
请通过关系说明has_and_belongs_to_many和has_many之间的区别。何时何地使用哪一个?
Answers:
据我所记得,has_and_belongs_to_many
它为您提供了一个简单的查询表,该表引用了您的两个模型。
例如,
故事可以分为许多类别。类别可以有很多故事。
Categories_Stories Table
story_id | category_id
has_many :through
为您提供了第三个模型,该模型可用于存储不属于任何原始模型的其他各种信息。
例如
人可以订阅许多杂志。杂志可以有很多订阅者。
因此,我们可以在中间有一个订阅模型,该模型为我们提供了与先前示例类似的表,但具有其他属性。
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date
等等。
最简单的经验法则是,如果需要将关系模型作为独立实体使用,则应设置has_many:through关系。如果您不需要对关系模型做任何事情,则设置has_and_belongs_to_many关系可能更简单(尽管您需要记住要在数据库中创建联接表)。如果需要在连接模型上进行验证,回调或其他属性,则应使用has_many:through。
如果需要在连接模型上进行验证,回调或其他属性,则应使用has_many:through。
许多答案表明,如果不需要在连接表上添加任何额外数据或验证,则应使用has_and_belongs_to_many
vs。has_many through:
但是,请注意采用这种方法。在应用程序开发的早期阶段,几乎不可能知道在项目生命周期的不久将来可能需要哪些额外的功能或验证。如果您决定使用has_and_belongs_to_many
,并希望在未来两年内添加一个简单的数据点或验证,则迁移此更改将非常困难且容易出错。为了安全起见,默认为has_many :through