2013-09-09 1 views

ответ

20

Rails 3

Нет, вам нужно позаботиться о индексах себя, так как индекс основан на имени таблицы. Например:

remove_index :old_table_name, :column_name 
rename_table :old_table_name, :new_table_name 
add_index :new_table_name, :column_name 

Rails 4+

От the Rails 4 upgrade guide:

В Rails 4.0, когда столбец или таблица переименовывается соответствующие индексы также переименованы. Если у вас есть миграции, которые переименовывают индексы, они больше не нужны.

+6

В Rails 4+ rename_table будет barf, если имя нового индекса слишком велико, поэтому в этом случае ваш подход по-прежнему будет полезен. –

+0

Хотя Rails 4+ автоматически переименовывает индексы, он получил ошибки и не смог переименовать. Итак, этот ответ полезен. – Sithu

+1

Также в Rails 4+ вы можете использовать 'rename_index: table_name," oldname "," newname "' в методе 'change'. Если вы получите эту ошибку, «Имя индекса [...] в таблице« fertilisation_planning_plot_details »слишком длинное, ограничение - 63 символа» сначала переименуйте индекс вручную в нечто короткое. – amoebe