作为Ruby on Rails的新手,我正在阅读Rails指南,今晚是Active Record Migrations。
在完成关于加入表(http://guides.rubyonrails.org/active_record_migrations.html#creating-a-join-table)的部分之后,我留下的印象是使用 create_join_table 比通过创建连接表更受欢迎(并且更简单) rails生成模型。
这是正确的假设吗?我应该注意细微差别吗?
答案 0 :(得分:6)
使用类别和产品指南中的示例:
连接表透明地工作。您只能使用两个现有模型(Category
和Product
),并且连接表仅用于启用它们之间的HABTM关系,因此您可以调用category.products
或{{1事情就好了。
对比product.categories
关联(read more)的Rails指南说明:
has_and_belongs_to_many关联创建直接的多对多关系 与另一个模型连接,没有介入模型。例如, 如果您的应用程序包括每个组件的组件和部件 你有许多部件和每个部件出现在许多组件中 可以用这种方式声明模型:
与Categorization
关联(read more):
a has_many:通常使用关联 与另一个模型建立多对多连接。这个 关联表示声明模型可以匹配 通过第三个进行另一个模型的零个或多个实例 模型。例如,考虑患者所做的医疗实践 约见医生。相关协会声明 可能看起来像这样:
所以,是的,你是正确的has_and_belongs_to_many
比为关联创建模型更简单。您还可以看到this answer,了解这些方法之间差异的另一种解释。
答案 1 :(得分:2)
正如文档提到的那样......
迁移方法
create_join_table
创建HABTM
联接表
-
当您创建has_and_belongs_to_many
关系时,仅需要一个联接表(无模型)。
has_and_belongs_to_many
个联接表与has_many :through
不同,因为它们没有id
(primary_key
); has_many :through
用于表示临时模型,因此每个“记录”应具有唯一标识符。
因此,关于通过rails g model
创建连接表是否更好的问题是错误的。 has_and_belongs_to_many
没有绑定模型。如果您使用has_many :through
,则可以使用rails g model
没问题。