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本身?
答案 0 :(得分:2)
默认情况下未添加到 HABTM 连接表
关键在于:HABTM
has_and_belongs_to_many
旨在简单地将两组或更多组数据连接在一起。不需要主索引 - 只需要两组foreign_keys
您可能希望添加索引等的原因是has_many :through
(主要用于在连接中为您提供额外的属性)。
虽然has_many :through
旨在让您能够使用中央模型加入其他两个......
...它通常仅用作连接模型(上例中的IE,连接模型可以称为physician_patients
)。
如果您以此身份使用has_many :through
,则您希望在联接表中包含索引。