Ответ 1
Вы можете использовать метод index_exists?
в своей миграции, чтобы проверить, действительно ли нужен индекс для удаления.
Взгляните на документацию здесь: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/index_exists%3F
Я не тестировал его, но вы должны использовать что-то вроде этого:
class AddTimestampIndexes < ActiveRecord::Migration
def up
remove_index :books, :created_at if index_exists?(:books, :created_at)
remove_index :books, :updated_at if index_exists?(:books, :updated_at)
add_index :books, :created_at
add_index :books, :updated_at
end
def down
remove_index :books, :created_at
remove_index :books, :updated_at
end
end
Хотя, по взглядам вещей, вы действительно хотите только создать их, если их не существует? Это может быть более подходящим для вашей миграции:
class AddTimestampIndexes < ActiveRecord::Migration
def up
add_index :books, :created_at unless index_exists?(:books, :created_at)
add_index :books, :updated_at unless index_exists?(:books, :updated_at)
end
def down
remove_index :books, :created_at
remove_index :books, :updated_at
end
end