【问题标题】:Create join table using migrations or models?使用迁移或模型创建连接表?
【发布时间】:2016-05-20 05:29:07
【问题描述】:

作为一名 Ruby on Rails 新手,我正在阅读 Rails 指南,今晚是 Active Record 迁移。

在完成关于联接表 (http://guides.rubyonrails.org/active_record_migrations.html#creating-a-join-table) 的部分后,我的印象是使用 create_join_table 比通过 rails generate 创建联接表更可取(并且更简单)型号

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

【问题讨论】:

  • 谢谢,我不知道这个方法

标签: ruby-on-rails ruby jointable


【解决方案1】:

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

连接表透明地工作。您只使用现有的两个模型(CategoryProduct),并且连接表的存在只是为了启用它们之间的 HABTM 关系,因此您可以调用 category.productsproduct.categories,一切正常。

另一方面,只有当您需要将该关联作为应用程序中的一个不同的事物 使用时,才需要生成模型(例如,如果您需要使用 @987654332 进行操作)直接@)。

对比 has_and_belongs_to_many 关联 (read more) 的 Rails 指南描述:

has_and_belongs_to_many 关联创建直接的多对多 与另一个模型的连接,没有干预模型。例如, 如果您的应用程序包括装配体和零件,则每个装配体 有许多零件并且每个零件都出现在许多装配体中,您 可以这样声明模型:

has_many :through 关联 (read more):

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

所以,是的,create_join_table 比为关联创建模型更简单,这是正确的。您还可以查看this answer,了解这些方法之间差异的另一种解释。

【讨论】:

  • 感谢您的解释。这是完全有道理的。 MVC 对我来说是一个新概念,但我想我明白了。
【解决方案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 没问题。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2013-07-19
    • 2011-12-02
    • 1970-01-01
    • 2017-09-15
    • 2020-01-28
    • 1970-01-01
    • 2022-10-06
    • 2021-08-23
    相关资源
    最近更新 更多