KATUUUNs blog

プログラミング学習で得た知識をアウトプットするためのブログです

学習47日目 ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint failsのエラーの対処

こんにちはKATUUUNです
現在オリジナルアプリ作成中です。
そこで遭遇したエラーについて共有します。

  • エラー内容

タイトルの通り、ActiveRecord::StatementInvalid: Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint failsが表示されたf:id:KT34309349:20210819145512p:plain

  • 前提

英単語帳のような単語投稿アプリを作成中
テーブルは以下の3種類
・usersテーブル
・keywordsテーブル(単語帳投稿関連)
・testsテーブル(上2つの中間テーブル)

  • 背景

投稿した単語を削除しようとしたら上記のエラーが表示された。

  • 原因

dependentディペンデントオプションが設定できていなかった

dependentディペンデントオプションとは
親モデルを削除した時に、親モデルと関連している子モデルに対する挙動を指定するオプションです。
たとえば、dependentオプションに:destroyを指定したときは、親モデルが削除されたとき、それに紐付ている子モデルも一緒に削除されます。

  • 対処

各モデルファイルを以下のように修正しました

修正前

user.rb
has_many :keywords
has_many :tests
keyword.rb
has_many :tests
test.rb
belongs_to :user
belongs_to :keyword

修正後

user.rb
has_many :keywords
has_many :tests, dependent: :destroy
keyword.rb
belongs_to :user
has_many :tests, dependent: :destroy
test.rb
belongs_to :user
belongs_to :keyword

以上です!