私は、現在のプロジェクトでかなり急なリファクタリングを行っている最中です。この岐路にたどり着く前に、2 つのモデルが実際には同じモデルであることに気づきましたが、異なる状態にあり、システムをそのように表現したいと考えています。その結果、すぐに廃止されるモデルのすべてのオブジェクトを取得し、それらを他のモデルに移動して、新しいステータス列を正しく設定する必要があります。特にモデルが非常に似ているため、問題はコード的に単純です。
私にとっての問題点は、両方向への移行の中間点でこれらの変更を行わなければならないことです。ここからそこまでの道のりは次のようになります。
add_column :model_ones, :status, :string
make_all_model_two_records_into_model_one_records()
drop_table :model_twos
明らかに、他の方向も簡単に定義できます
create_table :model_twos do |t|
...
end
move_model_ones_with_status_x_into_model_twos_table
remove_column :model_ones, :status
これは良いことですが、レポから ModelTwo.rb を削除するという魔法の瞬間に到達すると、すべてが無駄になります。その時点で、そのソースを読まずにゼロから移行することはできません。それに対する私の反応は、データを前後に移動するためにまっすぐなSQLを書くか、そのデータ変換を移行から除外することです。抜いたら一体どこへ?移行時に適切なタイミングで確実に移行するにはどうすればよいですか?
そして、私が問題のその側面を克服し、ゼロから現在まで幸せに移行できるようになったとしましょう. 下に移行することはできませんよね?これは、段階的な移行の概念が私にとって単に死んでいる瞬間を表しているのでしょうか?
以前の移行に戻って、ModelTwo がまったく存在しなかったことを世界に納得させることができると思います。
この種の Rails のリファクタリングは、すでにどこかで行われているはずです。それは実行可能でなければなりませんよね?私はそれを行う方法を理解できません。
前もって感謝します、jd