---
title: "编写幂等的 migration"
description: "当你要写破坏性的 migration 时，如果要删除数据表，请加上 if\\exists: true；如果要添加或删除字段，请先检查数据表是否存在…"
canonical: https://oozou.com/til/create-idempotent-migrations-28
locale: zh-Hans
date: 2020-10-13
topic: ruby-on-rails
---

# 编写幂等的 migration

> 当你要写破坏性的 migration 时，如果要删除数据表，请加上 if\exists: true；如果要添加或删除字段，请先检查数据表是否存在…

Published: 2020-10-13 · Topic: [ruby on rails](https://oozou.com/zh-Hans/til-topics/ruby-on-rails) ([markdown](https://oozou.com/zh-Hans/til-topics/ruby-on-rails.md))

当你要写破坏性的 migration 时，如果要删除数据表，请加上 *if\_exists: true*；如果要添加或删除字段，请先用 *ActiveRecord::Base.connection.table\_exists?* 检查数据表是否存在

情况 1：

```ruby
def up
  drop_table :kittens, if_exists: true
end
```

情况 2：

```ruby
def up
  return unless ActiveRecord::Base.connection.table_exists?(:kittens)
  add_column :kittens, :kind, :integer
end
```

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/zh-Hans/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
