No se puede eliminar el tema sin categoría

Tengo un tema en nuestra base de datos con un category_id cuya categoría alguien ha eliminado. Puedo abrir este tema directamente con su ID:
url: …/t/3

en la tabla topics, el ID = 3 tiene category = 4. Pero esta categoría está eliminada y no está en la tabla categories. Muchos de estos temas perdidos los pude eliminar. Pero este no funciona, porque los atributos closed y archived son verdaderos.

Si elijo en el menú emergente “Eliminar permanentemente” este tema, obtengo el siguiente mensaje de error:
“Ocurrió un error: Este tema tiene publicaciones no eliminadas. Elimínelas permanentemente antes de eliminar permanentemente el tema”.

¿Alguna idea de cómo insertar una categoría ficticia con el ID 4 en la base de datos o de cómo eliminar este tema perdido?

Creo que ese es el tema “Acerca de” para la categoría General. Normalmente, los temas “Acerca de” no se podrían eliminar en la interfaz de usuario.

¿Hay alguna razón por la que quieras eliminar este por completo?

1 me gusta

porque esta categoría no está más disponible, pero qué es más importante: el enlace a todas las categorías en la barra lateral ya no funciona.
Si intento abrir …/categories me sale el mensaje de error: “Error Something went wrong.” y en la consola del navegador se muestra el mensaje de error:

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 no está definido
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 Me gusta

Parece que alguien borró la categoría cuando tenía temas dentro de alguna manera. Eso no debería suceder. Creo que tendrás que hacer algo como

rails c
c=Category.last; # o alguna otra forma de obtener una categoría)
Topic.where(category_id: 4).update_all(category_id: c.id)

Si tu categoría General fue eliminada de forma segura a través de la interfaz de usuario, es de esperar que el tema “Acerca de” se elimine de forma suave como estás viendo. No debería causar ningún problema. :thinking:

Creo que puede haber algo más en juego. ¿Hay más detalles sobre ese error en tu página /logs?

1 me gusta

Esto parece no 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

Y en el Explorador de Datos obtengo:

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. Pensé que tu tema roto tenía category_id de 4.

Esa fue mi mejor suposición. Si tienes un presupuesto, podrías pedir ayuda en Marketplace. Creo que necesitarás a alguien que se meta en rails para ver si puede resolverlo.

1 me gusta

Marketplace siempre es una opción, especialmente si es urgente. :heart:

Aunque un poco más de detalle aquí podría ayudar a impulsar una respuesta de la comunidad. :crossed_fingers:

Ambos parecen confiar en que la causa raíz es este tema. Si el explorador de datos puede encontrarlo, entonces deberían poder encontrarlo en la consola de Rails. Si pueden encontrarlo, ¿deberían poder usar post_destroyer en él y eliminarlo desde allí?

(Aunque dudo un poco en recomendarlo ya que no he conectado del todo los puntos hasta dónde está el problema)

3 Me gusta

sí, en la consola de Ruby puedo ver ese topic:

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

pero en Topic no hay nada

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

como puedes ver, encontrar es posible. Pero no tengo idea de la sintaxis de Ruby para eliminar exactamente esta entrada de tabla.

Hmm. :thinking: Es inusual poder encontrarlo de una manera y no de la otra.

La consola de Rails puede ser un poco como un cuchillo afilado, por lo que sería mejor averiguar qué salió mal exactamente para minimizar cualquier accidente/efecto dominó.

¿Cómo se eliminó esta categoría en primer lugar?

(Por si acaso el problema no está causado por este tema perdido, también incluiré lo básico para verificar el modo seguro y ver si hay más información sobre el error en tu página TuSitio/logs)

Aunque no sé si tus datos están en un estado en el que la opción de eliminar categorías podría ayudar? Bulk delete all topics in a category

Buena pregunta. Fue hecho hace algunos años por otro administrador.

Mientras tanto, eliminé este tema directamente en la consola de rails con:

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

Después de esto, el tema se elimina :grinning_face:

1 me gusta

¿Y eso también solucionó tu enlace de categoría defectuoso en la barra lateral?

Es interesante que solo esté mostrando un problema ahora cuando se había eliminado felizmente durante varios años.

Si descubres la conexión, házmelo saber. :slight_smile:

1 me gusta

Desafortunadamente, esto no soluciona el error con el enlace de la categoría. Pero el problema con la publicación no eliminable está resuelto por ahora. El problema de la categoría tampoco se registra en el registro (log). Abordaré esto en los próximos días.

1 me gusta

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