Rails 6 & 模型关联 and/or 迁移

Rails 6 & Model Association and/or Migrations

我有一个关于 rails 6 和有或没有迁移的模型关联的问题。 让我更具体一点。 假设我们想在用户 table 中放置一个外键,它链接到课程 table 的 id 列。 我 运行 中的大部分教程和课程都遵循这条路线:

  1. 创建迁移 add_column :users, :course_id, :integer
  2. 将 has_one 或 has_many 和 belongs_to 放置到适当的模型中。 就是这样。

我的想法是,这样怎么样:

  1. 创建迁移 add_reference :users, :course, foreign_key: true
  2. 将适当的 has_one/has_many 和 belongs_to 放置到适当的模型中。

还是一样? 第二个选项不是也创建索引而第一个选项不是吗?

哪个是最佳做法?

add_reference 是 rails 约定的一部分的快捷方式,在幕后,它将调用 add_column 和您指定的其他选项 [you can check the code for rails-6 here]

虽然外键不是必需的,但它们被认为是最佳实践,因为它们保证了参照完整性。你可以在这里阅读更多相关信息 https://edgeguides.rubyonrails.org/active_record_migrations.html#foreign-keys

or is it the same? Doesn't the second option create indexes as well whereas the first does not?

尽管如此,您的 2 个迁移并不完全相同,即使它们工作相同(它们实现相同的目标)- 第二个选项将默认添加索引,除非您指定选项不添加-我绝对同意你关于使用 add_reference 的看法,因为这是一个更简单、更万无一失的快捷方式

当然,您也可以通过添加索引和外键来使用第一次迁移手动实现

add_column :users, :course_id, :integer
add_index :users, :course_id # uniq or not
add_foreign_key :courses, :users