外部キー制約つきカラムにインデックスを貼る方法
2022.02.25
オーソドックスなやり方
indexオプション
class CreateTweets < ActiveRecord::Migration[5.2]
def change
create_table :tweets do |t|
t.string :text
t.integer :user_id, index: true #indexオプション
end
end
end
add_indexメソッド
class CreateTweets < ActiveRecord::Migration[5.0]
def change
create_table :tweets do |t|
t.string :text
t.integer :user_id
end
add_index :tweets, :user_id
# add_index :対象のテーブル名, インデックス対象のカラム名
end
end
外部キー制約つきカラムの場合
class CreateTweets < ActiveRecord::Migration[5.0]
def change
create_table :tweets do |t|
t.string :text
t.integer :user_id
end
add_foreign_key :tweets, :users
# add_foreign_key :対象のテーブル名, :指定先のテーブル
end
end
reference型を使用しない場合、 foreign_key: true
では外部キー制約にならないので注意。
reference型を使用する場合
class CreateTweets < ActiveRecord::Migration[5.0]
def change
create_table :tweets do |t|
t.string :text
t.references :user, foreign_key: true
end
end
end
t.reference :user
だけでは外部キー制約はつかないので、後ろに foreign_key: true
を付ける。
インデックスは自動で付く。