Будет ли удаление столбца с миграцией Rails удалять индексы, связанные со столбцом

в Rails 2 Удаление столбца с миграцией Rails также изменит / удалит индексы, связанные с столбцом? Если нет, и вместо этого вы также должны изменить/удалить каждый индекс вручную, не следует ли вместо этого автоматизировать?

Спасибо (от новичка Rails)

6 ответов


нет, к сожалению, вам нужно удалить индекс вручную из миграции с помощью remove_index метод.


от рельсов 4 вверх, индекс извлекает автоматически с удалением столбца.


чтобы уточнить, внутри миграции синтаксис для удаления индекса столбца 2 Следующий

remove_index :actions, :column => [:user_id,:action_name]

или по имени, хуже вариант, с моей точки зрения

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"

как раз как предосторежение, пока рельсы 4 будет удалить индекс для вас, если вы удалите столбец, вы должны указать тип столбца. Без типа столбца выполняется rake db:rollback вернутся

rake aborted!
StandardError: An error has occurred, all later migrations canceled:

remove_column is only reversible if given a type.

я экспериментировал с удалением столбцов внешнего ключа, которые были индексированы. Даже указание index: true в блоке изменений, похоже, не делали столбцы обратимыми при откате.


в Rails > 3.2.16 удаление столбца удаляет индекс.


Если вы хотите удалить индекс, вы должны использовать remove_index, Если вы используете remove_column Он удаляет индекс, но вы не можете запустить rake db:rollback. Как упоминал Джим.

remove_column is only reversible if given a type.