Supongo que este es otro problema de tabla corrupta, aunque ocurre en una instancia donde es poco probable que la base de datos se haya apagado incorrectamente.
Creé y eliminé una insignia sin miembros y funcionó bien. Agregué un usuario a una nueva insignia y la eliminé, y también funcionó bien.
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".
Sin embargo, no estoy seguro de dónde buscar ni qué índice intentar reconstruir.
No. Parece un error (menor) que puedas iniciar la eliminación de una insignia si alguien la tiene. Sería mejor que la interfaz de usuario lo impidiera. Es totalmente correcto que la base de datos impida la eliminación y preserve la integridad referencial.
Estoy de acuerdo en que es mejor no eliminar la insignia que dejar el sistema en un estado roto, pero en este momento devuelve un error 500 sin ninguna explicación.
Es cierto que es un error menor de UX, pero impide que alguien que no sabe tanto como tú pueda eliminar una insignia.
Muchas gracias por tu ayuda. Estoy esperando a ver qué pasa con esos usuarios cuyos perfiles eliminé.