Permalinks reparieren, um auf topic-url und nicht auf den ersten Beitrag des Themas zu verweisen

Nach einer angepassten Migration zeigten viele Permalinks auf den ersten Beitrag eines Themas anstatt auf die Topic-URL selbst.

z.B. Permalinks, die auf
https://forum.example.com/t/example-topic/123/1
zeigen

anstatt auf
https://forum.example.com/t/example-topic/123


Überprüfung

Ein Discourse-Forum ist betroffen, wenn es Einträge für diese SQL-Abfrage gibt:

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;

Schnelle Korrektur

Dies ändert Permalinks so, dass sie direkt auf das Thema zeigen, wenn sie ursprünglich auf den ersten Beitrag im Thema zeigten.

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;

Dies könnte eine gute Bereinigungsroutine sein, die am Ende von Migrationsskripten ausgeführt wird.

1 „Gefällt mir“

Wie hast du die Permalinks erstellt?

Zum Beispiel wird hier discourse/script/import_scripts/vanilla_mysql.rb at main · discourse/discourse · GitHub speziell die Beitragsnummer überprüft. Wenn es 1 ist, wird die Beitragsnummer nicht übergeben (bleibt NULL) und somit sollte der Permalink nicht auf den ersten Beitrag zeigen.

2 „Gefällt mir“

Ich habe einen SQL-basierten Ansatz für Permalinks gewählt, der auf Code basiert, der dem von

ähnelt.
… aber mit fehlendem AND post_number <> 1 – das war also die Ursache.

1 „Gefällt mir“

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