将通过Rails迁移删除列,删除与该列关联的索引

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

谢谢(来自Rails新手)

George Jempty asked 2020-02-13T03:37:25Z
6个解决方案
58 votes

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

enter08 answered 2020-02-13T03:37:58Z
25 votes

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

John Topley answered 2020-02-13T03:37:38Z
6 votes

需要说明的是,在迁移过程中,删除2列索引的语法如下

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

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

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"
Maragues answered 2020-02-13T03:38:22Z
5 votes

请注意,如果您删除列,Rails 4会为您删除索引,但是您应该指定列类型。 没有列类型,运行index: true将返回

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

remove_column is only reversible if given a type.

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

Jim answered 2020-02-13T03:38:47Z
0 votes

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

Mark Swardstrom answered 2020-02-13T03:39:07Z
0 votes

如果要删除索引,则应使用remove_index,如果要使用remove_column,则确实会删除索引,但无法运行rake db:rollback。 正如吉姆所说。

remove_column is only reversible if given a type.
William Hu answered 2020-02-13T03:39:27Z
translate from https://stackoverflow.com:/questions/7204476/will-removing-a-column-with-a-rails-migration-remove-indexes-associated-with-the