読者です 読者をやめる 読者になる 読者になる

index:true ではインデックスは張られない [Rails]

Rails 4.2.5 でカラムを追加する時にインデックスを張りたかったので、

# db/migrate/timestamp_add_name_to_persons.rb
class AddNameToPersons < ActiveRecord::Migration
  def change
    add_column :persons, :name, :string, index: true
  end
end

としたのだが、db/schema.rb をチェックするとどうもうまく張られていないようだった。
表示されないだけで実際は張られているかもしれないと思いコンソールから調べてみると

Person.connection.index_exists?(:persons, :name)
# => false

やはり張られていない。

どうも index:true ではインデックスは張られないようだ。
参考: PSA: "index: true" in Rails migrations does not work as you'd expect - makandropedia

インデックスを張るときは add_index を使うとよい。

# db/migrate/timestamp_add_name_to_persons.rb
class AddNameToPersons < ActiveRecord::Migration
  def change
    add_column :persons, :name, :string
    add_index :persons, :name
  end
end

db/schema.rb とコンソールを確認して、OK!