Можно ли переименовать индекс с помощью миграции рельсов?
Я знаю, что существует преобразование rename_column
, но кажется, что rename_index
не существует.
Нужно ли вместо этого использовать remove_index
и add_index
?
Ответы
Ответ 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.
Ответ 3
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
Ответ 4
Как и Rails 5 (EDIT: также в Rails 4), переименование столбца также автоматически переименует индекс.
Ответ 5
В соответствии с API использование remove_index
и add_index
- единственный способ добиться этого.