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

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

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


person Dexygen    schedule 26.08.2011    source источник
comment
Кстати, вот интересный пост, который не обязательно напрямую отвечает на мой вопрос: keyj.wordpress.com/2009/05/28/   -  person Dexygen    schedule 26.08.2011
comment
Обновление: в настоящее время он удаляет индекс (Rails 4.1.7).   -  person B Seven    schedule 29.11.2014


Ответы (6)


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

person John Topley    schedule 26.08.2011
comment
для MySQL 5.1 (по крайней мере) это не так. См .: stackoverflow.com/a/4341928 - person Tyler; 11.05.2013
comment
В Rails 4 это происходит сейчас: stackoverflow.com/a/27622694/407213 (например: я пробовал и после remove_column ..., remove_index ... выбрасывает имя индекса '...' в таблицу '...' не существует ‹3) - person Dorian; 16.06.2016

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

person enter08    schedule 23.12.2014
comment
Хотя удаление столбца приведет к удалению его индекса, это не будет полностью обратимым. Откат не вернет индекс. В этом случае требуется remove_index - person Peter T.; 24.05.2019

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

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

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

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"
person Maragues    schedule 02.10.2012

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

person Jim    schedule 23.04.2015

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

remove_column is only reversible if given a type.
person William Hu    schedule 30.08.2016

В Rails> 3.2.16 удаление столбца приводит к удалению индекса.

person Mark Swardstrom    schedule 28.06.2016