#はじめに
データ削除時にConstraintException: FOREIGN KEY constraint failed
というエラーがでたのでその解決方を書く。
#モデル
今回扱ったモデルは次の様なアソシエーションである。
Noteモデルが複数のカテゴリーをもつ。
この時Noteコントローラー
で@note.destroy
と書いたところ、次の様なエラーが発生した。
#原因
このエラーの原因は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
も削除できる。
これでエラー解決です。