在 Rails 2 中,使用 Rails 迁移删除列是否也会更改/删除与该列关联的索引?如果不是,那么您还必须手动更改/删除每个索引,难道不应该自动化吗?
谢谢(来自 Rails 新手)
在 Rails 2 中,使用 Rails 迁移删除列是否也会更改/删除与该列关联的索引?如果不是,那么您还必须手动更改/删除每个索引,难道不应该自动化吗?
谢谢(来自 Rails 新手)
从 Rails 4 开始,索引会随着列的移除而自动移除。
不,很遗憾,您必须使用该remove_index
方法从迁移中手动删除索引。
为了澄清,在迁移中删除 2 列索引的语法如下
remove_index :actions, :column => [:user_id,:action_name]
或按名称,从我的角度来看,这是一个更糟糕的选择
remove_index :actions, :name => "index_actions_on_user_id_and_action_name"
请注意,虽然 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
在更改块中指定似乎也不会使列在回滚时可逆。
如果你想删除你应该使用的索引remove_index
,如果你使用remove_column
它确实删除了索引但你不能运行 rake db:rollback。正如吉姆所说。
remove_column is only reversible if given a type.
在 Rails > 3.2.16 中,删除列会删除索引。