Я создал таблицу и добавил к ней индекс. При второй миграции я переименовал таблицу. Будет ли продолжать работать индекс?
Rails Migration: индексы в переименованной таблице
Ответы (1)
Рельсы 3
Нет, вам нужно будет позаботиться об индексах самостоятельно, поскольку индекс основан на имени таблицы. Например:
remove_index :old_table_name, :column_name
rename_table :old_table_name, :new_table_name
add_index :new_table_name, :column_name
Рельсы 4+
Из руководства по обновлению Rails 4:
В Rails 4.0 при переименовании столбца или таблицы соответствующие индексы также переименовываются. Если у вас есть миграции, которые переименовывают индексы, они больше не нужны.
person
pdobb
schedule
09.09.2013
В Rails 4+ rename_table будет ругаться, если имя нового индекса слишком длинное, поэтому в этом случае ваш подход все еще полезен.
- person Andrew Pietsch; 04.01.2016
Хотя Rails 4+ автоматически переименовывает индексы, он получил ошибки и не смог переименовать. Итак, этот ответ полезен.
- person Sithu; 04.02.2016
Также в Rails 4+ вы можете использовать
rename_index :table_name, "oldname", "newname"
в методе change
. Если вы получите эту ошибку, имя индекса [...] в таблице 'fertilisation_planning_plot_details' слишком длинное; ограничение составляет 63 символа, сначала вручную переименуйте индекс во что-то короткое.
- person amoebe; 26.09.2016
Миграции недостаточно умны, чтобы решать проблемы со слишком длинными именами. Я все еще всегда использую индексы переименования, чтобы быть уверенным.
- person el n00b; 31.10.2018