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

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

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

Ответ 1

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

Ответ 2

В Rails 4 индекс автоматически удаляется с удалением столбца.

Ответ 3

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

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

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

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"

Ответ 4

Также как осторожность, в то время как Rails 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 в блоке изменений не показало, что столбцы обратимы при откате.

Ответ 5

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

Ответ 6

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

remove_column is only reversible if given a type.