Можно ли переименовать индекс с помощью миграции рельсов? - PullRequest
36 голосов
/ 06 марта 2009

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

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

Ответы [ 5 ]

58 голосов
/ 24 апреля 2012

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

rename_index :table_name, 'old_name', 'new_name'

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

41 голосов
/ 29 сентября 2011

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

12 голосов
/ 28 мая 2016

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

3 голосов
/ 06 марта 2009

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

0 голосов
/ 07 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...