Rails + PostgreSQLでカラムをキャストできない型に変更する方法
トラブル時の状況
- bit_varying型のカラムをinteger型に変更したかったがCAST()で雑にキャストできなかった
- 一旦string型に変更してからinteger型に変更しようとするマイグレーションを実行したが、string型で処理されてしまった
解決方法
カラムを削除する変更と追加する変更を行う
マイグレーションファイル
class ChangeUserHogehogeToInteger < ActiveRecord::Migration[5.2] def change remove_column :user, :hogehoge add_column :user, :hogehoge, :integer, null: false, comment: "hoge" end end
カラムの変更後に必要な作業
- モデルテストの修正
- モデルのバリデーション修正
おまけ
- integerに変更後、負数を許さない場合はモデルでバリデーションチェックを行う
validates :hogehoge, presence: true, numericality: { greater_than_or_equal_to: 0 }
参考
この記事はkb Advent Calendar 2020 3日目の記事です。