Je suppose qu’il s’agit d’un autre problème de table corrompue ? Pourtant, cela se produit sur une instance où il est peu probable que la base de données ait été arrêtée de manière incorrecte.
J’ai créé et supprimé un badge sans membre, et cela a fonctionné sans problème. J’ai ajouté un utilisateur à un nouveau badge et l’ai supprimé, et cela a également fonctionné sans problème.
Started DELETE "/admin/badges/118" for 71.89.242.121 at 2020-05-28 16:50:04 +0000
Processing by Admin::BadgesController#destroy as */*
Parameters: {"id"=>"118"}
Rendering text template
Rendered text template (Duration: 0.0ms | Allocations: 1)
Completed 500 Internal Server Error in 304ms (ActiveRecord: 0.0ms | Allocations: 114838)
ActiveRecord::InvalidForeignKey (PG::ForeignKeyViolation: ERROR: update or delete on table "badges" violates foreign key constraint "fk_rails_38ea484ed4" on table "user_profiles"
DETAIL: Key (id)=(118) is still referenced from table "user_profiles".
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.1/lib/patches/db/pg.rb:72:in `exec_params'
Failed to handle exception in exception app middleware : PG::ForeignKeyViolation: ERROR: update or delete on table "badges" violates foreign key constraint "fk_rails_38ea484ed4" on table "user_profiles"
DETAIL: Key (id)=(118) is still referenced from table "user_profiles".
Mais je ne sais pas exactement où chercher ou quel index tenter de reconstruire.
Non. Il semble y avoir un (léger) bug si vous pouvez initier la suppression d’un badge lorsqu’une personne le possède. Il serait préférable que l’interface utilisateur l’empêche. Il est tout à fait correct que la base de données empêche la suppression et préserve l’intégrité référentielle.
Je suis d’accord qu’il vaut mieux ne pas supprimer le badge que de laisser le système dans un état cassé, mais pour l’instant, cela renvoie une erreur 500 sans aucune explication.
C’est certes un bug mineur d’expérience utilisateur, mais cela empêche quelqu’un qui ne connaît pas aussi bien que vous de pouvoir supprimer un badge.
Merci beaucoup pour votre aide. J’attends de voir ce qu’il advient des utilisateurs dont j’ai supprimé les profils !