ユーザーがタイトルバッジとして設定している場合、バッジを削除できない

これはまた別の破損したテーブルの問題でしょうか?ただし、これはデータベースが不正にシャットダウンされた可能性が低いインスタンスで発生しています。

メンバーがいないバッジを作成して削除しましたが、問題なく動作しました。新しいバッジにユーザーを追加して削除しましたが、これも問題なく動作しました。

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

これでユーザーが 2 人になりました。
その後、

delete  FROM user_profiles where granted_title_badge_id = 118;

を実行し、その後バッジを削除できます。

私の問題は少なくともこのバッジについては解決したようです。

しかし、バッジを削除すればこれが自動的に行われるべきではありませんか?今はどちらかといえばバグのように思えます。:bug:

「いいね!」 2

:scream: 2人のユーザーのプロフィールを削除してしまいましたね :scream:

次回からは

UPDATE user_profiles SET granted_title_badge_id = (別の ID) WHERE granted_title_badge_id = 118
としてください

「いいね!」 4

おお、それは確かに問題のようですね。だからこそ、SQL でデータベースの変更を直接行うべきではないと人々に伝えているのです。

幸いなことに影響を受けたのは 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.