0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【カテゴリ機能】destroyアクションでのエラー[FOREIGN KEY constraint failed]

Posted at

#はじめに
データ削除時にConstraintException: FOREIGN KEY constraint failedというエラーがでたのでその解決方を書く。

  
#モデル
今回扱ったモデルは次の様なアソシエーションである。
スクリーンショット 2021-04-21 16.36.09.png

Noteモデルが複数のカテゴリーをもつ。
  
この時Noteコントローラー@note.destroyと書いたところ、次の様なエラーが発生した。
スクリーンショット 2021-04-21 16.29.42.png
  
#原因
このエラーの原因はNote_category_relationモデルに、
note_idを外部キーとして持っているためである。
  
つまり、Noteを削除する際、note_idを外部キーにもつNote_category_relationのデータも一緒に削除しなければいけないと言うこと。
  
#エラー処理
これは編集前のNoteモデル。

app/models/note.rb
class Note < ApplicationRecord
  has_many :note_category_relations #ここが問題
  has_many :categories, through: :note_category_relations
end

  
このファイルを次の様に編集する。

app/models/note.rb
class Note < ApplicationRecord
  has_many :note_category_relations, dependent: :destroy #追加部分
  has_many :categories, through: :note_category_relations
end

has_many :note_category_relations, dependent: :destroyとすることによって、Noteが削除された時に、そのNoteを外部キーとして持っているnote_category_relationsも削除できる。

  
これでエラー解決です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?