使用迁移或模型创建连接表?

时间:2016-02-10 01:39:36

标签: ruby-on-rails ruby jointable

作为Ruby on Rails的新手,我正在阅读Rails指南,今晚是Active Record Migrations。

在完成关于加入表(http://guides.rubyonrails.org/active_record_migrations.html#creating-a-join-table)的部分之后,我留下的印象是使用 create_join_table 比通过创建连接表更受欢迎(并且更简单) rails生成模型

这是正确的假设吗?我应该注意细微差别吗?

2 个答案:

答案 0 :(得分:6)

使用类别和产品指南中的示例:

连接表透明地工作。您只能使用两个现有模型(CategoryProduct),并且连接表仅用于启用它们之间的HABTM关系,因此您可以调用category.products或{{1事情就好了。

另一方面,如果您需要在应用程序中将该关联作为一个独特的 thing (例如,如果您需要使用{{{ 1}}直接)。

对比product.categories关联(read more)的Rails指南说明:

  

has_and_belongs_to_many关联创建直接的多对多关系   与另一个模型连接,没有介入模型。例如,   如果您的应用程序包括每个组件的组件和部件   你有许多部件和每个部件出现在许多组件中   可以用这种方式声明模型:   enter image description here

Categorization关联(read more):

  

a has_many:通常使用关联   与另一个模型建立多对多连接。这个   关联表示声明模型可以匹配   通过第三个进行另一个模型的零个或多个实例   模型。例如,考虑患者所做的医疗实践   约见医生。相关协会声明   可能看起来像这样:   enter image description here

所以,是的,你是正确的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不同,因为它们没有idprimary_key); has_many :through用于表示临时模型,因此每个“记录”应具有唯一标识符。

因此,关于通过rails g model创建连接是否更好的问题是错误的。 has_and_belongs_to_many没有绑定模型。如果您使用has_many :through,则可以使用rails g model没问题。