Não é possível excluir o emblema se um usuário o tiver definido como seu emblema de título

Acho que este é outro problema de tabela corrompida? Embora isso esteja ocorrendo em uma instância onde é improvável que o banco de dados tenha sido desligado de forma incorreta.

Criei e excluí um emblema sem membros e funcionou normalmente. Adicionei um usuário a um novo emblema e o excluí, e também funcionou normalmente.

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

Mas não tenho certeza de onde procurar ou qual índice tentar recriar.

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

O que SELECT * FROM user_profiles where granted_title_badge_id = 118; te diz?

4 curtidas

Isso me dá dois usuários.
Depois, eu

delete  FROM user_profiles where granted_title_badge_id = 118;

e então posso excluir a insígnia.

Parece que meu problema foi resolvido, pelo menos para esta insígnia.

Mas não deveria a exclusão da insígnia fazer isso? Agora parece mais um :bug:

2 curtidas

:scream: Você acabou de excluir os perfis de dois usuários :scream:

Da próxima vez

UPDATE user_profiles SET granted_title_badge_id = (outro id) WHERE granted_title_badge_id = 118

4 curtidas

Nossa. Isso realmente parece ser um problema. É por isso que eu digo às pessoas para não fazerem alterações no banco de dados via SQL.

Pelo menos foram apenas 2 usuários. Talvez eu ainda possa rolar para ver quem eram.

Mas ainda parece um bug que não seja possível excluir um emblema se alguém o tiver.

Reclassificando como um bug.

3 curtidas

Não. Parece um bug (menor) que você possa iniciar a exclusão de um emblema se alguém o tiver. Seria melhor se a interface do usuário o impedisse. É totalmente correto que o banco de dados impeça a exclusão e preserve a integridade referencial.

2 curtidas

Concordo que é melhor não excluir o distintivo do que deixar o sistema em um estado quebrado, mas no momento ele retorna um erro 500 sem explicação.

É um bug menor de UX, com certeza, mas impede que alguém que não saiba tanto quanto você consiga excluir um distintivo. :slight_smile:

Muito obrigado pela sua ajuda. Estou aguardando para ver o que acontece com aqueles usuários cujos perfis eu excluí!

3 curtidas

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