사용자가 해당 배지를 타이틀 배지로 설정한 경우 삭제할 수 없음

이것은 또 다른 손상된 테이블 문제일까요? 다만 이 인스턴스는 데이터베이스가 비정상적으로 종료되었을 가능성이 낮습니다.

멤버가 없는 배지를 생성하고 삭제했는데 정상적으로 작동했습니다. 새로운 배지에 사용자를 추가한 뒤 삭제해도 정상적으로 작동했습니다.

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

하지만 어디를 봐야 하고 어떤 인덱스를 재구축해야 할지 정확히 모르겠습니다.

1개의 좋아요

TABLE "user_profiles" CONSTRAINT "fk_rails_38ea484ed4" FOREIGN KEY (granted_title_badge_id) REFERENCES badges(id)

SELECT * FROM user_profiles where granted_title_badge_id = 118; 쿼리는 무엇을 알려줍니까?

4개의 좋아요

이렇게 하면 두 명의 사용자를 얻게 됩니다.
그 다음

delete  FROM user_profiles where granted_title_badge_id = 118;

을 실행한 후 배지를 삭제할 수 있습니다.

제 문제는 적어도 이 배지에 대해서는 해결된 것 같습니다.

하지만 배지를 삭제하면 이 작업이 자동으로 이루어져야 하지 않나요? 지금은 더 이상 :bug:처럼 보입니다.

2개의 좋아요

: scream: 방금 두 사용자의 프로필을 삭제해 버렸네요 :scream:

다음에는

UPDATE user_profiles SET granted_title_badge_id = (another id) WHERE granted_title_badge_id = 118을 사용하세요.

4개의 좋아요

아, 진짜. 그거 문제가 되는 것 같네요. 그래서 사람들이 SQL로 DB를 직접 수정하지 말라고 하는 겁니다.

다행히도 사용자가 2명뿐이었네요. 누가 있었는지 스크롤해서 확인할 수 있을지도 모르겠어요.

하지만 누군가가 배지를 가지고 있으면 삭제할 수 없는 건 여전히 버그인 것 같습니다.

버그로 재분류합니다.

3개의 좋아요

아니요. 누군가 배지를 가지고 있는 경우에도 배지 삭제를 시작할 수 있는 것이 (경미한) 버그로 보입니다. 사용자 인터페이스에서 이를 방지할 수 있다면 더 좋겠습니다. 데이터베이스가 삭제를 방지하고 참조 무결성을 유지하는 것은 완전히 정상입니다.

2개의 좋아요

뱃지를 삭제하는 것보다 시스템을 깨진 상태로 두는 것이 더 나쁘다는 데에는 동의하지만, 지금은 아무 설명 없이 500 에러가 반환되고 있습니다.

사소한 UX 버그이긴 하지만, 여러분만큼 잘 모르는 사용자들이 뱃지를 삭제하지 못하게 막고 있습니다. :slight_smile:

도와주셔서 정말 감사합니다. 제가 프로필을 삭제한 사용자들에게 무슨 일이 생길지 지켜보는 중입니다!

3개의 좋아요

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