Rails迁移:重命名表上的索引

19

我创建了一个表并对其添加了索引。 在第二次迁移中,我重命名了这个表。 索引是否仍然有效?

我创建了一张表并为它添加了索引。 在第二次迁移时,我重命名了这张表。 这个索引还会继续起作用吗?

1个回答

36

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+

根据Rails 4升级指南

在Rails 4.0中,当列或表重命名时,相关的索引也会被重命名。如果您有重命名索引的迁移,它们不再需要。


11
在Rails 4+中,如果新索引的名称太长,rename_table会抛出错误,因此在这种情况下,你的方法仍然很有用。 - Andrew Pietsch
虽然Rails 4+可以自动重命名索引,但它仍可能出现错误并无法重命名。因此,这个答案非常有用。 - Sithu
4
在 Rails 4+ 中,你可以在 change 方法中使用 rename_index :table_name, "oldname", "newname" 来重命名索引。如果你遇到了“Index name [...] on table 'fertilisation_planning_plot_details' is too long; the limit is 63 characters”这个错误,那么先手动将该索引重命名为一个短一些的名称。 - amoebe
2
迁移工具无法智能处理“名称过长”的问题。我仍然总是使用重命名索引来确保安全。 - el n00b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接