Kann Abzeichen nicht löschen, wenn ein Benutzer es als Titelsymbol verwendet

Ich vermute, es handelt sich um ein weiteres Problem mit einer beschädigten Tabelle? Obwohl dies auf einer Instanz auftritt, bei der es unwahrscheinlich ist, dass die Datenbank unsauber heruntergefahren wurde.

Ich habe ein Abzeichen ohne Mitglieder erstellt und wieder gelöscht, und das funktionierte einwandfrei. Ich habe einen Benutzer zu einem neuen Abzeichen hinzugefügt und es anschließend gelöscht, und auch das funktionierte problemlos.

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".

Allerdings weiß ich nicht genau, wo ich suchen oder welchen Index ich versuchen sollte, neu aufzubauen.

1 „Gefällt mir“

TABELLE "user_profiles" EINSCHRÄNKUNG "fk_rails_38ea484ed4" FOREIGN KEY (granted_title_badge_id) VERWEIST AUF badges(id)

Was sagt SELECT * FROM user_profiles where granted_title_badge_id = 118; aus?

4 „Gefällt mir“

Das ergibt mir zwei Benutzer.
Dann lösche ich

DELETE FROM user_profiles WHERE granted_title_badge_id = 118;

und kann danach das Badge löschen.

Mein Problem scheint zumindest für dieses Badge gelöst zu sein.

Aber sollte das Löschen des Badges das nicht automatisch erledigen? Jetzt wirkt es eher wie ein :bug:

2 „Gefällt mir“

:scream: Du hast gerade die Profile von zwei Benutzern gelöscht :scream:

Nächstes Mal

UPDATE user_profiles SET granted_title_badge_id = (eine andere ID) WHERE granted_title_badge_id = 118

4 „Gefällt mir“

Oh. Mein Gott. Das klingt wirklich nach einem Problem. Deshalb sage ich Leuten immer, sie sollten keine Datenbankänderungen direkt in SQL vornehmen.

Zumindest waren es nur zwei Benutzer. Vielleicht kann ich noch scrollen, um zu sehen, wer das waren.

Aber es scheint trotzdem ein Fehler zu sein, dass man ein Abzeichen nicht löschen kann, wenn jemand eines davon besitzt.

Als Fehler neu kategorisiert.

3 „Gefällt mir“

Nein. Es scheint ein (geringerer) Fehler zu sein, dass man die Löschung eines Abzeichens einleiten kann, wenn jemand eines besitzt. Es wäre schöner, wenn die Benutzeroberfläche dies verhindern würde. Es ist jedoch absolut korrekt, dass die Datenbank die Löschung verhindert und die referenzielle Integrität wahrt.

2 „Gefällt mir“

Zugegeben, es ist besser, das Abzeichen nicht zu löschen, als das System in einem fehlerhaften Zustand zu lassen, aber aktuell wird ein 500-Fehler ohne Erklärung zurückgegeben.

Zwar ein kleiner UX-Fehler, aber er verhindert, dass jemand, der nicht so viel weiß wie Sie, ein Abzeichen löschen kann. :slight_smile:

Vielen Dank für Ihre Hilfe. Ich warte ab, was mit den Benutzern passiert, deren Profile ich gelöscht habe!

3 „Gefällt mir“

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