Ruby On Rails - 新しい移行とモデル変更により移行が失敗する
概要
新しいテーブルを追加するために新しい移行を作成しました。それを呼びましょう new_items 新しいテーブルを作成します。
移行では、別のテーブルとの関係を指定しました
t.belongs_to :parent
私のモデルでは、
class NewItem < ApplicationRecord
belongs_to :parent
class Parent < ApplicationRecord
has_many :new_items, :dependent => :destroy
したがって、すべての移行を最初から実行すると、古い移行で障害が発生します 「テーブル「new_items」が見つかりませんでした」 失敗した移行では、これは問題がどこにあるかを示す行です
def up
Parent.where(name: "TestName").destroy_all
end
この次の行を削除すると完了まで実行されるため、親モデルに問題があります。
has_many :new_items, :dependent => :destroy
問題が親と NewItem の関係にあることはわかっていますが、最善の修正方法がわかりません
なぜそれが起こっているのかはわかりますが、テーブル間の関係を維持しながらそれを解決する方法がわかりません
解決策
移行で ActiveRecord モデルを使用する場合は、将来モデルに変更を加えても古い移行が中断されないように、これらのモデルを移行内で定義することが賢明です。
class Parent < ApplicationRecord; end
または、クラスが何もする必要がない場合は、より良い方法で
Parent = Class.new(ApplicationRecord)
移行クラス内に追加すると、問題が解決されるはずです。
補足: 単に親テーブルからすべてのレコードを削除したい場合は、移行時に Parent.delete_all を呼び出すことをお勧めします。これでも問題は解決しますが、移行にモデルを追加することをお勧めします。