ip_number_from列には何がありますか?
いずれにせよ、私はおそらく:
- タイプbigintの新しい列を作成します。
- Railsコンソールまたはrakeタスクを使用して、ip_number_fromからnew_columnにデータを手動でコピーします。
- 元のip_number_from列を削除します
- new_columnの名前をip_number_fromに変更します
または、mjtkoが提案したように、SQLにドロップダウンすることもできますが、それがもっと簡単になるかどうかはわかりません。
アップデート
ユールが提案していることを調べました。データのキャスト/コピーが成功したかどうかを実際に確認することはできないため、1回の移行でこれらすべてを実行するのは少し危険だと思います。1回の移行でそれを実行したい場合、あなたの場合は次のようになります。
def up
add_column :table, :new_column, :bigint
Model.reset_column_information
Model.all.each do |m|
m.update_attribute :new_column, Model.bigint_from_ip_number_from(m)
end
drop_column :table, :ip_number_from
rename_column :table, :new_column, :ip_number_from
end
次に、対応するダウンマイグレーションを追加する必要があります。
これはいつでも複数の移行に分割して、進行状況/成功を確認できます。