データを一部消したいのですが、サーバーでは
「Mysql2::Error: Cannot delete or update a parent row: a foreign key constraint fails (moyamoya_development
.cheers
, CONSTRAINT fk_rails_77ac16afbb
FOREIGN KEY (post_id
) REFERENCES posts
(id
)): DELETE FROM posts
WHERE posts
.id
= 8」
とエラーが表示されてしまいます。
Mysqlから消そうとすると「予定外の行数が削除されました!1 行が削除されませんでした。 テーブルを再読み込みして内容が変更されていないことを確認してください。 このテーブルの主キーにエラーの可能性があるのでコンソールを確認してください!」と表示されて消せません。
おそらく外部キー制約にひっかかっており、postsテーブルに当該ユーザに紐付くデータが存在しているのに、ユーザを削除しようとして怒られているものと思われますが、削除手順がいまいち分かりません。解決方法を教えていただきたいと思います。よろしくお願いします。
posts テーブルの posts.id = 8 から参照されていると親切に教えてくれてますので、先にそれを消せばユーザーも削除できると思いますが、実は他にもあるかもしれません (エラーメッセージには最初に見つけたものだけを表示している可能性があります) とか、posts.id = 8 に対する返信なども消す必要があるかも知れません。
いちばん手っ取り早い方法としては、外部キー制約に on delete cascade 属性をつけることで参照元を自動的に消してくれます。
https://qiita.com/suin/items/21fe6c5a78c1505b19cb
ただ、サービスとしてそれでいいのかということは別問題ですが…。
返信ありがとうございます。
その後、
「SET FOREIGN_KEY_CHECKS=0;」
をしてから、必要な処理を行い、
「SET FOREIGN_KEY_CHECKS=1;」
で元に戻す事で上手く行きました。
あなたの回答
tips
プレビュー