54

在 Rails 2 中,使用 Rails 迁移删除列是否也会更改/删除与该列关联的索引?如果不是,那么您还必须手动更改/删除每个索引,难道不应该自动化吗?

谢谢(来自 Rails 新手)

4

6 回答 6

77

从 Rails 4 开始,索引会随着列的移除而自动移除。

于 2014-12-23T14:50:00.400 回答
27

不,很遗憾,您必须使用该remove_index方法从迁移中手动删除索引。

于 2011-08-26T12:22:58.750 回答
6

为了澄清,在迁移中删除 2 列索引的语法如下

remove_index :actions, :column => [:user_id,:action_name]

或按名称,从我的角度来看,这是一个更糟糕的选择

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"
于 2012-10-02T10:54:31.423 回答
5

请注意,虽然 Rails 4在您删除列时为您删除索引,但您应该指定列类型。没有列类型,运行rake db:rollback会返回

rake aborted!
StandardError: An error has occurred, all later migrations canceled:

remove_column is only reversible if given a type.

我正在尝试删除被索引的外键列。即使index: true在更改块中指定似乎也不会使列在回滚时可逆。

于 2015-04-23T15:57:25.710 回答
1

如果你想删除你应该使用的索引remove_index,如果你使用remove_column它确实删除了索引但你不能运行 rake db:rollback。正如吉姆所说。

remove_column is only reversible if given a type.
于 2016-08-30T11:09:52.760 回答
0

在 Rails > 3.2.16 中,删除列会删除索引。

于 2016-06-28T17:30:50.970 回答