railsの4.2.6のmigration周りの話
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.integer :age t.timestamps end add_index :users, :name end end
仮に上記のようなテーブルを作成してnameindexをはる
すると自動で index_users_on_name
という名前がつく
この名前は add_index
にname optionを指定することで任意の名前にできる
add_index - リファレンス - - Railsドキュメント
add_index :users, :name, name: 'by_name'
本題はこれからでindexを消そうと思ってmigrationファイルを
class RemoveIndexFromUsers < ActiveRecord::Migration def change remove_index :users, :name end end
のように作成してmigrateすると
Index name 'index_users_on_name' on table 'users' does not exist
でエラーになる
どうやら指定した by_name
というものではなくnameを指定しない場合につくnameを探しにいってる
解決策としては
remove_index :users, column: :name, name: 'by_name'
このようにindexを消すcolumnとnameを指定してあげればいけた
remove_index - リファレンス - - Railsドキュメント
※ rails5ではこの現象はおきなかった 後日調べる