Подтвердить что ты не робот

Можно ли переименовать индекс с помощью миграции рельсов?

Я знаю, что существует преобразование rename_column, но кажется, что rename_index не существует.

Нужно ли вместо этого использовать remove_index и add_index?

4b9b3361

Ответ 1

Вы также можете выполнить произвольный 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, поддерживаемый вашей базой данных.

Ответ 2

rename_index должны быть указаны строки, а не символы.

rename_index :table_name, 'old_name', 'new_name'

Я немного почесал голову, пытаясь переименовать таблицу и индексировать ее. Rails 3.2.3 и MySQL.

Ответ 4

Как и Rails 5 (EDIT: также в Rails 4), переименование столбца также автоматически переименует индекс.

Ответ 5

В соответствии с API использование remove_index и add_index - единственный способ добиться этого.