是否可以使用rails迁移重命名索引?

时间:2009-03-06 20:19:17

标签: ruby-on-rails migration

我知道有一个rename_column转换,但似乎rename_index不存在。

我是否必须使用remove_indexadd_index代替?

5 个答案:

答案 0 :(得分:58)

rename_index应该是字符串而不是符号。

rename_index :table_name, 'old_name', 'new_name'

当我试图重命名一张桌子和它的索引时,让我挠了一下头。 Rails 3.2.3和MySQL。

答案 1 :(得分:41)

Rails 3提供了重命名索引的快捷方式:

rename_index :table_name, :old_name, :new_name

http://guides.rubyonrails.org/migrations.html

顺便说一下,除了删除旧的并添加新的

之外,它没有什么用处

http://apidock.com/rails/v2.3.8/ActiveRecord/ConnectionAdapters/SchemaStatements/rename_index

答案 2 :(得分:12)

从Rails 5开始(编辑:也在Rails 4中),重命名列也会自动重命名索引。

答案 3 :(得分:3)

根据API,使用remove_indexadd_index是实现此目标的唯一方法。

答案 4 :(得分:0)

您也可以在迁移中执行任意SQL。

我们有一些辅助方法可以为表添加外键:

def add_foreign_key(from_table, from_column, to_table)
  constraint_name = "fk_#{from_table}_#{from_column}"

  execute %{alter table #{from_table}
            add constraint #{constraint_name}
            foreign key (#{from_column})
            references #{to_table}(id)
           }
  end

您可以使用数据库支持的任何SQL。