Remove_Culumns_Safety

Railsでカラムを安全に削除する方法

方法

1. 削除するカラムを参照している実装を全て修正

2. ActiveRecord に ignore_columns をつける

  • ActiveRecordはスキーマキャッシュでカラム情報をキャッシュしているため、いきなりカラムを削除するとそのカラムがまだ存在するかのように振る舞ってしまう
  • ignore_columns に指定されているカラムはスキーマ読み込み時に除外される
class Post < ApplicationRecord
  self.ignored_columns = [:title]
end

3. 本番で問題ないことを確認

  • 本当にそのカラムは使われていないか

4. カラムを削除

  • migration ファイルを実行する
class RemoveTitleFromPosts < ActiveRecord::Migration[6.1]
  def change
    remove_column :posts, :title, :string
  end
end

5. ignore_columns を削除する

# 以下実装を削除する
class Post < ApplicationRecord
   self.ignored_columns = [:title]
end

参考