我发现我的模式中有两个“survey_id”列,这给我带来了一些问题。特别是我需要删除第二个索引,因为我不希望survey_id是唯一的。
add_index "completions", ["survey_id"], name: "index_completions_on_survey_id"
add_index "completions", ["survey_id"], name: "index_completions_on_survey_id_and_user_id", unique: true
我试过了
def change
remove_index "completions", ["survey_id"], name => "index_completions_on_survey_id_and_user_id"
end
和
def change
remove_index "completions", ["survey_id"], name: "index_completions_on_survey_id_and_user_id"
end
但是这两种方法似乎都不起作用。这个迁移删除索引的正确语法是什么?我觉得这是基本的,我只是错过了一些愚蠢的东西。提前感谢!
4条答案
按热度按时间dwthyt8l1#
删除索引时未提供索引中的列。请尝试:
ajsxfq5m2#
当您需要回滚迁移时,此处可接受的答案不起作用,将给出
ActiveRecord::IrreversibleMigration
错误。remove_index
仅在给定:column
选项时可逆。这将移除索引并且也是可逆的。
fnatzsnv3#
从Rails控制台运行以下命令
gtlvzcf84#
您可以将列名提供给
remove_index
。remove_index
方法将table_name
和options
作为参数。通过传入的选项,索引的名称由index_name_for_remove
私有方法确定,该方法简单地执行以下操作(如果它是数组):API documentation示例:
删除accounts表中分支_id上的索引(如果正好存在一个这样的索引)。
或者
删除帐户表中分支_id和party_id上的索引(如果正好存在一个这样的索引)。
删除帐户表中名为by_分支_party的索引。
除了以上所述,您还可以执行以下操作: