#環境
この記事ではmacOS Catalina10.15.6にインストールしたRuby 2.6.5を使っています。
#前提
3つのモデルを作成し、以下の状況となっています。
User / ユーザー
Report / レポート
Comment / ユーザーとレポートの関連付けテーブル
コメントがついているレポートの削除を行う際に、以下のエラーが発生しました。
##エラー発生
ActiveRecord::InvalidForeignKey in ReportsController#destroy
外部キーエラー
何が原因なのか、その解決策を考えます。
##原因
レポートの削除を行う際に、コメントテーブルのユーザーとレポートのidの値がなくなることが原因と判断。(外部キー制約のため)
ユーザーとレポートのidの関連付けがなくなったものは、コメントも削除できるようにしたい。
##解決策
dependent: :destroy
をUserモデル
とReportモデル
に記述する。
この記述により、親モデル(Report)を削除する際に、その親モデルに紐づく「子モデル(Comment)」も一緒に削除できる」ようになります。
##検証
class User < ApplicationRecord
has_many :reports
has_many :comments, dependent: :destroy
end
class Report < ApplicationRecord
belongs_to :user
has_many :comments, dependent: :destroy
end
無事解決しました!
以上です。
同じような悩みや壁にぶつかっている方のお役に立てれば幸いです!
#参考
下記を参考にしたので、より深く内容を理解したい方は、見てみてください!
https://qiita.com/Ushinji/items/650fa295a3054d2fe582
https://qiita.com/ITmanbow/items/2170ccaceafd5d401df8
https://qiita.com/Tsh-43879562/items/fbc968453a7063776637