Rails 4:
t.references :event, index: true
これで、Rails 5。でindex
の代わりにforeign_key
を使用できます。機能は同じままなので、なぜこれを行うことにしたのかよくわかりません。追加するのはインデックスであり、その列への外部キーではありません。
Rails 5-モデルを参照すると、foreign_key
のインデックスが自動的に作成されます。
移行APIはRails 5-で変更されました
Rails 5は移行APIを変更しました。そのため、移行の実行時にnull: false
オプションがタイムスタンプに渡されなくても、タイムスタンプにnull以外が自動的に追加されます。
同様に、ほとんどすべての場合に参照列のインデックスが必要です。したがって、Rails 5はindex: true
を持つための参照を必要としません。移行が実行されると、インデックスが自動的に作成されます。
例として コピー元---(http://blog.bigbinary.com/2016/03/01/migrations-are-versioned-in-Rails-5.html )
Rails g model Task user:references
を実行すると
Rails4は生成します
class CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
end
そしてRails 5は生成します
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.references :user, foreign_key: true
t.timestamps
end
end
end
index
とforeign_key
は、たとえRails 5であっても、異なる概念です。したがって、Rails 5が変更された」と言うのは誤りです。 「インデックス」から「外部キー」へ。
Rails 4からRails 5への変更は、index
オプションがデフォルトでtrue
になることです。したがって、そうしません。明示的に設定する必要があります。
メソッド add_reference in Rails 4.2.5
:index
適切なインデックスを追加します。デフォルトはfalseです。
メソッド add_reference in Rails 5.2
:index
適切なインデックスを追加します。デフォルトはtrueです。このオプションの使用法については、add_indexを参照してください。
そのため、Rails 5の移行でreferences
を生成すると、デフォルトであるため、index: true
は表示されませんでした。
foreign_key
と index
は完全に異なるものです(名前から判断できるように)。
したがって、何も変更されていません。引き続き2つ使用できます。
移行での関連付けの確立に関する詳細については、 これらのドキュメント を確認してください。