Rails Migration: индексы в переименованной таблице

Я создал таблицу и добавил к ней индекс. При второй миграции я переименовал таблицу. Будет ли продолжать работать индекс?


person Miotsu    schedule 09.09.2013    source источник


Ответы (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
comment
В Rails 4+ rename_table будет ругаться, если имя нового индекса слишком длинное, поэтому в этом случае ваш подход все еще полезен. - person Andrew Pietsch; 04.01.2016
comment
Хотя Rails 4+ автоматически переименовывает индексы, он получил ошибки и не смог переименовать. Итак, этот ответ полезен. - person Sithu; 04.02.2016
comment
Также в Rails 4+ вы можете использовать rename_index :table_name, "oldname", "newname" в методе change. Если вы получите эту ошибку, имя индекса [...] в таблице 'fertilisation_planning_plot_details' слишком длинное; ограничение составляет 63 символа, сначала вручную переименуйте индекс во что-то короткое. - person amoebe; 26.09.2016
comment
Миграции недостаточно умны, чтобы решать проблемы со слишком длинными именами. Я все еще всегда использую индексы переименования, чтобы быть уверенным. - person el n00b; 31.10.2018