Ruby on rails 使用Rails迁移删除列会删除与该列关联的索引吗

Ruby on rails 使用Rails迁移删除列会删除与该列关联的索引吗,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,在Rails 2中,通过Rails迁移删除列是否也会更改/删除与该列关联的索引?如果不是,那么您还必须手动更改/删除每个索引,它不是应该自动更改/删除吗 感谢(来自Rails新手)否,不幸的是,您必须使用该方法从迁移中手动删除索引。为了澄清,在迁移中,删除2列索引的语法如下 remove_index :actions, :column => [:user_id,:action_name] 从我的观点来看,这是一个更糟糕的选择 remove_index :actions, :name =&

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


感谢(来自Rails新手)

否,不幸的是,您必须使用该方法从迁移中手动删除索引。

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

remove_index :actions, :column => [:user_id,:action_name]
从我的观点来看,这是一个更糟糕的选择

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"

从Rails 4向上,索引会随着列的删除而自动删除。

作为警告,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
,也不会使列在回滚时可逆。

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

如果要删除索引,应使用
删除索引
,如果使用
remove\u column
它确实会删除索引,但不能运行rake db:rollback。正如吉姆提到的

remove_column is only reversible if given a type.

顺便说一句,这里有一篇有趣的帖子,不一定直接回答我的问题:更新:目前,它确实删除了索引(Rails 4.1.7)。对于MySQL 5.1(至少)来说,情况似乎并非如此。请参阅:在Rails 4中,它现在确实存在:(例如:我尝试过,在
remove\u column…
之后,
remove\u index…
在表“…”上抛出一个“索引名”…“不存在”,虽然移除列将移除其索引,但它不会完全可逆。回滚将不会添加索引。在这种情况下,需要
remove\u index