Ruby Rails 4使用索引重命名列

Ruby Rails 4使用索引重命名列,ruby,ruby-on-rails-4,jruby,database-migration,ruby-on-rails-4.2,Ruby,Ruby On Rails 4,Jruby,Database Migration,Ruby On Rails 4.2,根据,在rails 4中,重命名列也会重命名索引 class TestMigration < ActiveRecord::Migration def change binding.pry rename_column :feature_roles, :feature_id, :test_id binding.pry end end class TestMigration

根据,在rails 4中,重命名列也会重命名索引

class TestMigration < ActiveRecord::Migration
  def change
    binding.pry
    rename_column :feature_roles, :feature_id, :test_id
    binding.pry
  end
end
class TestMigration
当我在迁移之前列出此表的索引时,特定索引的名称是
index\u feature\u roles\u on\u feature\u id
,即使在迁移之后,它也保持不变。为什么不更新到测试id上的索引功能角色


我使用的是Jruby 9.1.12.0(ruby 2.3.3)

可能索引的名称不是数据库生成的,这是我们在创建索引时给出的,在这种情况下,索引的名称不会得到任何更新,但肯定会更新引用,这将以同样的方式工作

如果仍然要更新索引名,可以删除索引并重新创建它

DROP INDEX index_feature_roles_on_feature_id; 
在更新的列上发布重新创建索引作为

CREATE INDEX index_feature_roles_on_test_id ON feature_roles;

如果从长远来看,其他几个开发人员可能正在做相同的事情,这可能会有帮助,这将消除混淆。

gem中存在一个潜在的bug。查看GitHub以了解详细信息。

查看实际的
结构。sql
diff.I正在使用schema.rb,迁移后的相应条目如下:``添加索引“功能角色”、[“测试id”]、名称:“索引功能角色”,使用::btree``因此索引发生变化,只是名称保持不变。是的。但是稍后,如果我写一个迁移来删除索引的名称,它将失败。如果你使用旧名称,它将工作。谢谢你的回复。首先,添加索引名时没有显式指定它们。其次,这不是更新现有迁移的好做法。这是与我的旧开发环境。我现在正试图将我的jruby版本从9.1.6升级到9.1.12,我也很感激没有更新现有的迁移。我只是专注于添加新的迁移,以删除和创建具有更新名称的索引。:)Rails 4确保重命名列迁移也会更改索引名(现在不会发生这种情况,尤其是在jruby升级之后)