使用Rails迁移删除列将删除与该列关联的索引

时间:2011-08-26 12:14:15

标签: ruby-on-rails rails-migrations

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

谢谢(来自Rails新手)

6 个答案:

答案 0 :(得分:57)

从Rails 4开始,索引会在删除列时自动删除。

答案 1 :(得分:25)

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

答案 2 :(得分:6)

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

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

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

remove_index :actions, :name => "index_actions_on_user_id_and_action_name"

答案 3 :(得分: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,也不会使回滚时列可逆。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果要删除索引,则应使用remove_column,如果使用remove_column is only reversible if given a type. ,则会删除索引,但无法运行rake db:rollback。正如吉姆所说。

        Intent intent = new Intent();
        intent.setType("image/*");
        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);