Rails 迁移:重命名表上的索引
Posted
技术标签:
【中文标题】Rails 迁移:重命名表上的索引【英文标题】:Rails Migration: indexes on a renamed table 【发布时间】:2013-09-13 02:46:30 【问题描述】:我创建了一个表并为其添加了索引。 在第二次迁移中,我重命名了该表。 索引会继续工作吗?
【问题讨论】:
【参考方案1】:导轨 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 中,当重命名列或表时,相关索引也会重命名。如果您有重命名索引的迁移,则不再需要它们。
【讨论】:
在 Rails 4+ 中,如果新索引的名称太长,rename_table 会出错,所以在这种情况下,您的方法仍然有用。 虽然 Rails 4+ 会自动重命名索引,但它会出错并且重命名失败。所以,这个答案很有用。 同样在 Rails 4+ 中,您可以在change
方法中使用 rename_index :table_name, "oldname", "newname"
。如果您收到错误“表 'fertilisation_planning_plot_details' 上的索引名称 [...] 太长;限制为 63 个字符”,请先手动将索引重命名为短名称。
迁移不够聪明,无法处理“名称太长”的问题。为了确定,我仍然总是使用重命名索引。以上是关于Rails 迁移:重命名表上的索引的主要内容,如果未能解决你的问题,请参考以下文章