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

问题描述 投票:0回答:5

我知道有

rename_column
变换,但好像
rename_index
不存在。

我必须使用

remove_index
add_index
来代替吗?

ruby-on-rails migration
5个回答
78
投票
引用索引名称时,

rename_index
应给出字符串而不是符号。

rename_index :table_name, 'old_name', 'new_name'

在尝试重命名表及其索引时,让我摸不着头脑。 Rails 3.2.3 和 MySQL。


45
投票

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


25
投票

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


4
投票

根据 API,使用

remove_index
add_index
是实现此目的的唯一方法。


1
投票

您也可以在迁移中执行任意 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。

© www.soinside.com 2019 - 2024. All rights reserved.