学習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が表示された
- 前提
英単語帳のような単語投稿アプリを作成中
テーブルは以下の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
以上です!