Impossible de supprimer un badge si un utilisateur l'a défini comme badge de titre

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.

1 « J'aime »

La requête SELECT * FROM user_profiles where granted_title_badge_id = 118; vous indique quelles informations ?

4 « J'aime »

Cela me donne deux utilisateurs.
Ensuite, je

DELETE FROM user_profiles WHERE granted_title_badge_id = 118;

et ensuite je peux supprimer le badge.

Mon problème semble résolu, du moins pour ce badge.

Mais la suppression du badge ne devrait-elle pas faire cela ? Cela ressemble davantage à un :bug: maintenant.

2 « J'aime »

:scream: Vous venez de supprimer les profils de deux utilisateurs :scream:

La prochaine fois

UPDATE user_profiles SET granted_title_badge_id = (un autre id) WHERE granted_title_badge_id = 118

4 « J'aime »

Oh. Mon. Cela semble être un problème. C’est pourquoi je dis aux gens de ne pas modifier la base de données en SQL.

Au moins, il n’y avait que 2 utilisateurs. Peut-être que je peux encore faire défiler pour voir qui ils étaient.

Mais il semble toujours y avoir un bug empêchant la suppression d’un badge si quelqu’un le possède.

Recatégorisé en tant que bug.

3 « J'aime »

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.

2 « J'aime »

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. :slight_smile:

Merci beaucoup pour votre aide. J’attends de voir ce qu’il advient des utilisateurs dont j’ai supprimé les profils !

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.