Rails ActiveRecord::Migration what is the difference between index: true and add_index?

samol picture samol · Nov 11, 2013 · Viewed 7.2k times · Source

What is the difference between

t.boolean :is_live, index: true

and

add_index :table_name, :is_live

If there is no difference, how come only the add_index is reflected in schema.rb. When I use index: true, I can't actually see the index in schema.rb. Should I only use the add_index method.

When use the add_index method, I can see this in my schema.rb

add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah

Answer

Alexey picture Alexey · Jul 15, 2014

Just found out that the :index option is for references only (t.references or t.belongs_to). For 'ordinary' column types this option is ignored (that's why indices are not reflected in your schema.db when you used the :index option).

For less verbose syntax there is an index type:

t.index :column_name # extra options may be provided also