Impossible de supprimer le sujet sans catégorie

J’ai un sujet dans notre base de données avec un category_id dont la catégorie a été supprimée par quelqu’un. Je peux ouvrir ce sujet directement avec son id :
url : …/t/3

dans la table topics, l’id = 3 a category = 4. Mais cette catégorie est supprimée et n’est pas dans la table categories. J’ai pu supprimer beaucoup de ces sujets perdus. Mais celui-ci ne fonctionne pas, car les attributs closed et archived sont à true.

Si je choisis dans le menu contextuel “Supprimer définitivement” ce sujet, je reçois le message d’erreur suivant :
“Une erreur s’est produite : Ce sujet contient des messages non supprimés. Veuillez les supprimer définitivement avant de supprimer définitivement le sujet.”

Avez-vous une idée de comment insérer une catégorie factice avec l’id 4 dans la base de données ou de supprimer ce sujet perdu ?

Je pense que c’est le sujet “À propos” pour la catégorie General ?. Normalement, les sujets “À propos” ne seraient pas supprimables dans l’interface utilisateur.

Y a-t-il une raison pour laquelle vous souhaitez supprimer complètement celui-ci ?

1 « J'aime »

parce que cette catégorie n’est pas plus disponible, mais ce qui est le plus important : le lien vers toutes les catégories dans la barre latérale ne fonctionne plus.
Si j’essaie d’ouvrir …/categories, j’obtiens un message d’erreur : “Error Something went wrong.” et dans la console du navigateur, le message d’erreur suivant s’affiche :

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 est indéfini
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 « J'aime »

On dirait que quelqu’un a supprimé la catégorie alors qu’elle contenait des sujets d’une manière ou d’une autre ? Ce n’est pas censé arriver. Je pense que vous devrez faire quelque chose comme

rails c
c=Category.last; # ou une autre façon d'obtenir une catégorie)
Topic.where(category_id: 4).update_all(category_id: c.id)

Si votre catégorie General a été supprimée en toute sécurité via l’interface utilisateur, il est normal que le sujet À propos soit supprimé de manière logicielle comme vous le voyez. Cela ne devrait causer aucun problème. :thinking:

Je pense qu’il y a peut-être autre chose en jeu. Y a-t-il plus de détails sur cette erreur dans votre page /logs ?

1 « J'aime »

Cela ne semble pas fonctionner :

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

Et dans Data Explorer, j’obtiens :

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

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

Hmm. Je pensais que votre sujet cassé avait category_id de 4.

C’était ma meilleure supposition. Si vous avez un budget, vous pourriez demander de l’aide dans Marketplace. Je pense que vous aurez besoin de quelqu’un pour accéder à rails afin de voir s’il peut comprendre.

1 « J'aime »

Marketplace est toujours une option, surtout si c’est urgent. :heart:

Bien qu’un peu plus de détails ici pourraient aider à susciter une réponse de la communauté. :crossed_fingers:

Vous semblez tous les deux confiants que la cause profonde est ce sujet. Si l’explorateur de données peut le trouver, vous devriez pouvoir le trouver dans la console Rails. Si vous pouvez le trouver, vous devriez pouvoir utiliser post_destroyer dessus et le supprimer à partir de là ?

(Bien qu’un peu hésitant à le recommander car je n’ai pas tout à fait relié les points à l’endroit où se situe le problème)

3 « J'aime »

oui, dans la console Ruby, je peux voir ce sujet:

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

mais dans Topic il n’y a rien

Topic.where(id: 3)
=> []

comme vous pouvez le voir, le trouver est possible. Mais je n’ai aucune idée de la syntaxe Ruby pour supprimer exactement cette entrée de table.

Hmm. :thinking: Il est inhabituel de pouvoir le trouver dans un sens et pas dans l’autre.

La console Rails peut être un peu comme un couteau bien aiguisé, il serait donc préférable de comprendre ce qui s’est mal passé exactement afin de minimiser les accidents/effets secondaires.

Comment cette catégorie a-t-elle été supprimée en premier lieu ?

(Au cas où le problème ne serait pas causé par ce sujet égaré, j’ajouterai les bases pour vérifier le mode sans échec et voir s’il y a plus d’informations sur l’erreur dans votre page YourSite/logs également)

Cependant, je ne sais pas si vos données sont dans un état où le système de suppression de catégorie pourrait aider ? Bulk delete all topics in a category

Bonne question. Cela a été fait il y a quelques années par un autre administrateur.

Pendant ce temps, j’ai supprimé ce sujet directement dans la console Rails avec :

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

Après cela, le sujet est supprimé :grinning_face:

1 « J'aime »

Et cela a également résolu votre lien de catégorie bizarre dans la barre latérale ?

Il est intéressant que le problème n’apparaisse que maintenant alors qu’il était supprimé depuis plusieurs années.

Si vous trouvez le lien, faites-le moi savoir. :slight_smile:

1 « J'aime »

Malheureusement, cela ne corrige pas l’erreur avec le lien de catégorie. Mais le problème avec la publication non supprimable est résolu pour le moment. Le problème de catégorie n’est pas non plus enregistré dans le journal. Je m’attaquerai à cela dans les prochains jours.

1 « J'aime »

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