我知道有一个rename_column
转换,但似乎rename_index
不存在。
我是否必须使用remove_index
和add_index
代替?
答案 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_index
和add_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。