In Rails 5 - when we reference a model, index on the foreign_key
is automatically created.
Migration API has changed in Rails 5 -
Rails 5 has changed migration API because of which even though null: false
options is not passed to timestamps when migrations are run then not null is automatically added for timestamps.
Similarly, we want indexes for referenced columns in almost all cases. So Rails 5 does not need references to have index: true
. When migrations are run then index is automatically created.
As an example - (Copying from http://blog.bigbinary.com/2016/03/01/migrations-are-versioned-in-rails-5.html)
When you run rails g model Task user:references
Rails 4 would generate
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
And rails 5 would generate
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.references :user, foreign_key: true
t.timestamps
end
end
end