Não consigo apagar o tópico sem categoria

Eu tenho um tópico no nosso banco de dados com um category_id cuja categoria alguém excluiu. Eu posso abrir este tópico diretamente com o ID dele:
url: …/t/3

Na tabela topics, o id = 3 tem category = 4. Mas essa categoria foi excluída e não está na tabela categories. Muitos desses tópicos perdidos eu consegui excluir. Mas este não funciona, porque os atributos closed e archived são verdadeiros.

Se eu escolher no menu popup “Excluir Permanentemente” este tópico, eu recebo a mensagem de erro:
“Ocorreu um erro: Este tópico tem posts não excluídos. Por favor, exclua-os permanentemente antes de excluir o tópico permanentemente.”

Alguma ideia de como inserir uma categoria dummy com id 4 no banco de dados ou para excluir este tópico perdido?

Acho que esse é o tópico Sobre para a categoria #geral?. Normalmente, os tópicos Sobre não poderiam ser excluídos na interface do usuário.

Há alguma razão pela qual você deseja excluir este completamente?

1 curtida

porque esta categoria não está mais disponível, mas o que é mais importante: o link para todas as categorias na barra lateral não funciona mais.
Se eu tento abrir …/categories eu recebo a mensagem de erro: “Erro Algo deu errado.” e no console do navegador a mensagem de erro é mostrada:

Uncaught TypeError: i is null
    reason binary.js:7
    l item.js:166
    get topic.js:1017
    ee upload.js:65
    get topic.js:1017
    get topic.js:1017
    eM topic.js:1017
    s backup-codes.js:33
    n backup-codes.js:33
    Z upload.js:65
    T backup-codes.js:33
    evaluate backup-codes.js:33
    _execute backup-codes.js:33
    execute backup-codes.js:33
    rerender backup-codes.js:33
    render theme-setting.js:6
    _renderRoots theme-setting.js:6
    tA backup-codes.js:33
    _renderRoots theme-setting.js:6
    _renderRootsTransaction theme-setting.js:6
    _revalidate theme-setting.js:6
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _run client-error-handler.js:88
    run client-error-handler.js:88
    d bookmark.js:114
    Ember 2
    _join client-error-handler.js:88
    join client-error-handler.js:88
    p bookmark.js:114
    h bookmark.js:114
    $ topic.js:1017
    trigger composer-action-title.js:62
    transitionStarted add-translation.js:27
    loading ace-editor.js:176
    D upload.js:65
    triggerEvent upload.js:65
    trigger form-template-validation.js:54
    _handleSlowTransition upload.js:65
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _runExpiredTimers client-error-handler.js:88
    setTimeout handler*setTimeout client-error-handler.js:88
    _installTimerTimeout client-error-handler.js:88
    _later client-error-handler.js:88
    later client-error-handler.js:88
    T bookmark.js:114
    _triggerAction form-template-validation.js:54
    click form-template-validation.js:54
binary.js:7
Uncaught TypeError: i is null
    reason binary.js:7
    l item.js:166
    get topic.js:1017
    ee upload.js:65
    get topic.js:1017
    get topic.js:1017
    eM topic.js:1017
    s backup-codes.js:33
    n backup-codes.js:33
    Z upload.js:65
    T backup-codes.js:33
    evaluate backup-codes.js:33
    _execute backup-codes.js:33
    execute backup-codes.js:33
    rerender backup-codes.js:33
    render theme-setting.js:6
    _renderRoots theme-setting.js:6
    tA backup-codes.js:33
    _renderRoots theme-setting.js:6
    _renderRootsTransaction theme-setting.js:6
    _revalidate theme-setting.js:6
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _run client-error-handler.js:88
    run client-error-handler.js:88
    d bookmark.js:114
    success base.js:71
    l loader.js:1286
    fireWith loader.js:1286
    jQuery 4
    a base.js:71
    e named-references.js:49
    e named-references.js:49
    A base.js:71
    _findCategoriesAndTopics item.js:166
    k named-references.js:49
    w named-references.js:49
    invoke client-error-handler.js:88
    flush client-error-handler.js:88
    flush client-error-handler.js:88
    _end client-error-handler.js:88
    end client-error-handler.js:88
    _runExpiredTimers client-error-handler.js:88
    setTimeout handler*setTimeout client-error-handler.js:88
    _installTimerTimeout client-error-handler.js:88
    _later client-error-handler.js:88
    later client-error-handler.js:88
    T bookmark.js:114
    _triggerAction form-template-validation.js:54
    click form-template-validation.js:54

TypeError: t.category_list.categories is undefined
s form-template-validation.js:54
categoriesFrom form-template-validation.js:54
_findCategoriesAndTopics item.js:166
k named-references.js:49
w named-references.js:49
invoke client-error-handler.js:88
flush client-error-handler.js:88
flush client-error-handler.js:88
_end client-error-handler.js:88
end client-error-handler.js:88
_run client-error-handler.js:88
run client-error-handler.js:88
d bookmark.js:114
success base.js:71
l loader.js:1286
fireWith loader.js:1286
jQuery 4
a base.js:71
e named-references.js:49
e named-references.js:49
A base.js:71
_findCategoriesAndTopics item.js:166
k named-references.js:49
w named-references.js:49
invoke client-error-handler.js:88
flush client-error-handler.js:88
flush client-error-handler.js:88
_end client-error-handler.js:88
end client-error-handler.js:88
_runExpiredTimers client-error-handler.js:88
setTimeout handler*setTimeout client-error-handler.js:88
_installTimerTimeout client-error-handler.js:88
_later client-error-handler.js:88
later client-error-handler.js:88

2 curtidas

Parece que alguém excluiu a categoria quando ela tinha tópicos dentro, de alguma forma? Isso não era para acontecer. Acho que você precisará fazer algo como

rails c
c=Category.last; # ou alguma outra forma de obter uma categoria)
Topic.where(category_id: 4).update_all(category_id: c.id)

Se sua categoria General foi excluída com segurança através da interface, é esperado que o tópico Sobre seja excluído logicamente como você está vendo. Isso não deve causar nenhum problema. :thinking:

Acho que pode haver algo mais em jogo. Há mais detalhes sobre esse erro na sua página /logs?

1 curtida

Isso parece não funcionar:

discourse(prod)> Topic.where(category_id: 4).update_all(category_id: 20)
=> 0
discourse(prod)> Topic.where(id: 3).update_all(category_id: 20)
=> 0

E no Explorador de Dados eu recebo:

Select id, closed, archived, title,category_id
from topics
where id = '3'

result:
id 	closed 	archived 	title 	category_id
3 	true 	true 	Über die Kategorie Team 	4

Hmm. Pensei que seu tópico quebrado tivesse category_id 4.

Essa foi a minha melhor suposição. Se você tiver um orçamento, pode pedir ajuda em Marketplace. Acho que você precisará de alguém para entrar no rails para ver se consegue descobrir.

1 curtida

Marketplace é sempre uma opção, especialmente se for urgente. :heart:

Embora um pouco mais de detalhe aqui possa ajudar a impulsionar uma resposta da comunidade. :crossed_fingers:

Ambos parecem confiantes de que a causa raiz é este tópico. Se o explorador de dados puder encontrá-lo, você deverá ser capaz de encontrá-lo no console do rails. Se você puder encontrá-lo, deverá ser capaz de usar o post_destroyer nele e excluí-lo de lá?

(Embora um pouco hesitante em recomendar, pois ainda não conectei os pontos de onde está o problema)

3 curtidas

sim, no console ruby eu posso ver este tópico:

result = ActiveRecord::Base.lease_connection.exec_query('SELECT id, category_id FROM topics WHERE id = 3')
result.rows
=\u003e [[3, 4]]

mas em Tópico não há nada

Topic.where(id: 3)
=\u003e []

como você pode ver, encontrar é possível. Mas eu não tenho ideia da sintaxe Ruby para excluir exatamente esta entrada de tabela.

Hmm. :thinking: É incomum conseguir encontrá-lo de uma maneira e não de outra.

O console do Rails pode ser uma faca um tanto afiada, então seria melhor descobrir o que exatamente deu errado para minimizar quaisquer acidentes/efeitos colaterais.

Como essa categoria foi excluída em primeiro lugar?

(Apenas por precaução, caso o problema não seja causado por este tópico perdido, incluirei o básico de verificar o modo de segurança e ver se há mais informações sobre o erro em sua página YourSite/logs também)

Embora eu não saiba se seus dados estão em um estado onde o catch-all de exclusão de categoria poderia ajudar? Bulk delete all topics in a category

Boa pergunta. Foi feito há alguns anos por outro administrador.

Enquanto isso, eu excluí este tópico diretamente no console do Rails com:

result = ActiveRecord::Base.lease_connection.exec_delete('DELETE FROM topics WHERE id = 3')

Depois disso, o tópico foi excluído :grinning_face:

1 curtida

E isso também resolveu o seu link de categoria torto na barra lateral?

É interessante que só esteja a apresentar um problema agora, quando já tinha sido felizmente eliminado durante vários anos.

Se descobrir a ligação, diga-me. :slight_smile:

1 curtida

Infelizmente, isso não corrige o erro com o link da categoria. Mas o problema com a postagem não removível está resolvido por enquanto. O problema da categoria também não está registrado no log. Vou abordar isso nos próximos dias.

1 curtida

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