web-dev-qa-db-ja.com

Rails移行を使用してインデックスの名前を変更することは可能ですか?

rename_column変換があることは知っていますが、rename_indexが存在しないようです。

代わりにremove_indexadd_indexを使用する必要がありますか?

38
hectorsq

移行で任意のSQLを実行することもできます。

テーブルに外部キーを追加するヘル​​パーメソッドがいくつかあります。

def add_foreign_key(from_table, from_column, to_table)
  constraint_name = "fk_#{from_table}_#{from_column}"

  execute %{alter table #{from_table}
            add constraint #{constraint_name}
            foreign key (#{from_column})
            references #{to_table}(id)
           }
  end

データベースがサポートする任意のSQLを使用できます。

1
Toby Hede

rename_indexには、記号ではなく文字列を指定する必要があります。

rename_index :table_name, 'old_name', 'new_name'

テーブルとそのインデックスの名前を変更しようとしたときに、しばらく頭を悩ませていました。 Rails 3.2.3およびMySQL。

61
Nothus

Rails 3は、インデックスの名前を変更するためのショートカットを提供します。

rename_index :table_name, :old_name, :new_name

http://guides.rubyonrails.org/migrations.html

ちなみに、古いものを削除して新しいものを追加する以上のことはしません。

http://apidock.com/Rails/v2.3.8/ActiveRecord/ConnectionAdapters/SchemaStatements/rename_index

41
Guillaume

Rails 5(EDIT:Rails 4)でも)の時点で、列の名前を変更すると、インデックスの名前も自動的に変更されます。

17
Greg Blass

[〜#〜] api [〜#〜] によると、これを実現する唯一の方法はremove_indexadd_indexを使用することです。

3
Rob Watson