Полагаю, это ещё одна проблема с повреждённой таблицей? Хотя это происходит на инстансе, где маловероятно некорректное завершение работы базы данных.
Я создал и удалил бейдж без участников, и всё прошло успешно. Я добавил пользователя в новый бейдж и удалил его, и это также сработало.
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".
Но я не совсем понимаю, куда смотреть или какой индекс попробовать перестроить.
Нет. Похоже на (незначительный) баг, что вы можете инициировать удаление бейджа, если он у кого-то есть. Было бы лучше, если бы интерфейс пользователя предотвращал это. Совершенно верно, что база данных блокирует удаление и сохраняет ссылочную целостность.