dependent: :destroyを中間テーブル関係先につけてると発生するエラー
中間テーブルで関係を持っている親同士のテーブルにdependent: :destroyをつける時に発生するエラーについて書いていきたいと思います。
deviseの編集機能(registrations/edit.html.erb)でアカウントを削除しようとした際に発生するエラーになります。
registrations/edit.html.erb
<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>
デフォルトだとこの様になっているコードがアカウントの削除を担ってくれます。
モデルの状況がこちらです。
has_many :game_player, dependent: :destroy has_many :game, through: :game_players, dependent: :destroy has_many :grades, through: :game_players, dependent: :destroy has_many :posts, dependent: :destroy has_many :comments, dependent: :destroy
この場合、games,gradeまで消そうとする状態になってしまうため、こちらのようなエラーが発生してしまいます。 解決方法としては、親としてのつながりのあるgames,gradeからdependent: :destroyを消すことで解決することができます。 中間テーブルも同時に消していきたい場合は、中間テーブルのみにdependent: :destroyを記述するようにしましょう。