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.
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.
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.
Vielen Dank für Ihre Hilfe. Ich warte ab, was mit den Benutzern passiert, deren Profile ich gelöscht habe!