为什么Rails默认情况下不会将索引添加到连接表中?

时间:2015-10-21 23:05:05

标签: ruby-on-rails indexing rails-migrations jointable

Active Record Migrations上的Rails指南第3.2节Creating a Join Table表示默认情况下不会将索引添加到连接表中:

  

create_join_table也接受一个可以用来添加的块   索引(默认情况下不创建)或其他列:

当我运行生成器时,我确实可以看到默认情况下至少没有添加一些索引:

class CreateJoinTableFooBar < ActiveRecord::Migration
  def change
    create_join_table :foos, :bars do |t|
      # t.index [:foo_id, :bar_id]
      # t.index [:bar_id, :foo_id]
    end
  end
end

Rails默认情况下不添加这些索引的理由是什么?

另外,只是为了澄清一下,如果我没有取消注释这些行,那么是否会产生以下指数:foo_id或:bar_id本身?

1 个答案:

答案 0 :(得分:2)

  

默认情况下未添加到 HABTM 连接表

关键在于:HABTM

has_and_belongs_to_many旨在简单地将两组或更多组数据连接在一起。不需要主索引 - 只需要两组foreign_keys

enter image description here

您可能希望添加索引等的原因是has_many :through(主要用于在连接中为您提供额外的属性)。

虽然has_many :through旨在让您能够使用中央模型加入其他两个......

enter image description here

...它通常仅用作连接模型(上例中的IE,连接模型可以称为physician_patients)。

如果您以此身份使用has_many :through,则您希望在联接表中包含索引。