Corriger les permaliens pour pointer vers l'URL du sujet et non vers le premier message du sujet

Après une migration personnalisée, de nombreux permaliens pointaient vers le premier message d’un sujet au lieu de l’URL du sujet lui-même.

par exemple, les permaliens pointant vers
https://forum.example.com/t/example-topic/123/1

au lieu de
https://forum.example.com/t/example-topic/123


Vérification

Un forum Discourse est affecté s’il existe des enregistrements pour cette requête SQL :

SELECT permalinks.*,
       posts.id,
       posts.topic_id,
       posts.post_number
FROM permalinks
         LEFT JOIN posts
                   ON posts.id = permalinks.post_id
WHERE permalinks.post_id IS NOT NULL
  AND posts.post_number = 1
LIMIT 20;

Correction rapide

Cela modifie les permaliens pour qu’ils pointent directement vers le sujet, s’ils pointaient à l’origine vers le premier message du sujet.

UPDATE permalinks
SET topic_id = posts.topic_id,
    post_id  = NULL
FROM posts
WHERE permalinks.post_id = posts.id
  AND permalinks.post_id IS NOT NULL
  AND posts.post_number = 1;

Cela pourrait être une bonne routine de nettoyage à exécuter à la fin des scripts de migration.

1 « J'aime »

Comment avez-vous créé les permaliens ?

Par exemple, ici discourse/script/import_scripts/vanilla_mysql.rb at main · discourse/discourse · GitHub, ils vérifient spécifiquement le numéro du message, si c’est 1, alors le message n’est pas passé (laissé comme NULL) et donc le permalien ne devrait pas pointer vers le premier message.

2 « J'aime »

J’ai adopté une approche basée sur SQL pour les permaliens, inspirée par un code similaire à celui-ci :

… mais sans le AND post_number <> 1 manquant – c’était donc le coupable.

1 « J'aime »

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