如何创建迁移以仅在索引存在时删除索引,而不是在索引不存在时引发异常?

现在,如果books表没有created\u atupdated\u at字段,则当前迁移可能会失败:

类addtimestampindex<ActiveRecord::迁移
定义
删除索引:书籍:已创建
删除索引:书籍:更新
添加索引:书籍,:已创建
添加索引:书籍,:更新
终止
降下
删除索引:书籍:已创建
删除索引:书籍:更新
终止
终止

remove_index如果无法删除索引而不是引发错误,是否会选择以静默方式继续

您可以在迁移中使用index\u exists?方法来测试需要删除的索引是否确实存在

请查看此处的文档:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/index_exists%3F

我还没有测试过,但您应该能够使用以下内容:

类addtimestampindex<ActiveRecord::迁移
定义
如果索引存在,是否删除索引:书籍:已创建
如果存在索引,则删除索引:书籍:更新的位置(:书籍:更新的位置)
添加索引:书籍,:已创建
添加索引:书籍,:更新
终止
降下
删除索引:书籍:已创建
删除索引:书籍:更新
终止
终止

虽然,从外观上看,你真的只想在它们不存在的情况下创建它们吗?
这可能更适合您的迁移:

类addtimestampindex<ActiveRecord::迁移
定义
添加索引:书籍:创建于,除非索引存在(:书籍:创建于)
添加索引:书籍,除非索引存在(:书籍,更新于)
终止
降下
删除索引:书籍:已创建
删除索引:书籍:更新
终止
终止

发表评论