👋

migrationファイルを使ってモデルとテーブルを削除する

2023/12/05に公開

概要

Ruby on Railsで、不要になったモデルを削除する方法をご紹介します。

削除方法は2つあります。

1つは rails destroy model model_names コマンドを使う方法ですが、この場合、モデル作成用のmigrationファイルが削除されてしまいます。DBの整合性がとれなくなる危険性があるため、おすすめできません。

もう1つは 削除用のmigrationファイルを作成し、rails db:migrate を実行する方法です。この場合「モデルを作成した後に削除した」という履歴が残るため安全です。本記事ではこちらの方法について解説します。

削除用のmigrationファイルを生成

ModelNamesという名前のモデルを削除するとします。

以下のコマンドを実行します。

rails g migration DropModelNames

削除用migrationファイル XXXXXXXXXXXXXX_drop_table_model_names.rb が生成されます。

削除用のmigrationファイルを編集

生成された XXXXXXXXXXXXXX_drop_table_model_names.rb を以下のように編集します。

class DropModelNames < ActiveRecord::Migration[7.0]
  def change
    drop_table :model_names do |t|
      t.string "name", default: "", null: false # ModelNamesの現在のカラム
      t.datetime "created_at", null: false # ModelNamesの現在のカラム
      t.datetime "updated_at", null: false # ModelNamesの現在のカラム
    end
  end
end

現時点のModelNamesのカラムについて記述することで、rollbackが可能になります。

rails db:migrate を実行

以下のコマンドを実行します。

rails db:migrate

DBからModelNamesテーブルが削除されます。
ただし、以下の関連ファイルは手動で削除する必要があります。

関連ファイルを手動で削除

  • app\models\corporate_member.rb
  • test\fixtures\corporate_users.yml
  • test\models\corporate_user_test.rb

これで完了です!

Discussion