Railsのmigrationのremove_indexで名前を変更したIndexを削除する方法
Railsのmigrationでindexを削除しようと思って 最初以下のように書いたら怒られました。
remove_index :items, [:shop_id, :item_id]
出力されたエラーメッセージは以下のような感じです。
Index name 'index_items_on_shop_id_and_item_id' on table 'items' does not exist
なぜ、怒られた方と言えば、index名を変更していたんですね。
indexを作成するときに、以下の用に作成していたんです。
add_index :items, column: [:shop_id, :item_id], name: 'index_items_on_shop_id_and_item_id_xxxxxxxxxxxxxx'
どうやら、remove_indexするときもカラム名から勝手にindex名を作って その名前のindexを探して削除しに行くのだと思われます。
で、ドキュメントをみたら、ちゃんとオプションがあったので オプション指定してやらないと行けないみたいです。
remove_index - リファレンス - - Railsドキュメント
下記はサンプルです。
unique 条件をを外したいパターンです。
# -*- encoding : utf-8 -*- class ChangeUniqueIndexToOrderItem < ActiveRecord::Migration def up remove_index :items, column: [:shop_id, :item_id], name: 'index_items_on_shop_id_and_item_id_xxxxxxxxxxxxxx' add_index :items, column: [:shop_id, :item_id], name: 'index_items_on_shop_id_and_item_id_xxxxxxxxxxxxxx' end def down remove_index :items, column: [:shop_id, :item_id], name: 'index_items_on_shop_id_and_item_id_xxxxxxxxxxxxxx' add_index :items, column: [:shop_id, :item_id], unique: true, name: 'index_items_on_shop_id_and_item_id_xxxxxxxxxxxxxx' end end
関連記事
Rails4 ビギナーズガイド: MVCアーキテクチャをマスターせよ! PRIMERシリーズ (libroブックス)
- 作者: 掌田津耶乃
- 出版社/メーカー: Tuyano-Project
- 発売日: 2016/02/21
- メディア: Kindle版
- この商品を含むブログを見る