Ответы в теме отображаются не по порядку

После недавнего обновления до версии 2.6.0.beta3 некоторые ответы в различных темах отображаются в неправильном порядке. Метки времени показываются верно, но затронутые ответы всегда находятся внизу темы.

Я пробовал обновить систему снова и выполнить команду rake posts:reorder_posts для затронутых тем, но это не помогло. Есть ли что-то ещё, что я могу сделать, чтобы исправить порядок? Или это ошибка в Discourse? Ответы отображаются одинаково для всех пользователей.

Пример из одной из тем, это низ темы:

Вы случайно не переместили последние два сообщения в эту тему? В таком случае это ожидаемое поведение.

Нет, они всегда были в этой теме, и до обновления ответы шли в ожидаемом порядке.

Это происходит не в одной теме, а, похоже, во всех. Есть один или два ответа в конце, которые не должны там быть.

У меня была та же проблема.

Нет, я не перемещаю сообщения в тему, но ответы в ветке отображаются в неправильном порядке.

Запуск запроса из posts:reorder_posts показывает, что sort_order для ряда постов выглядит странно, и кажется, что rake-задача должна их обновить, но этого не происходит.


При выполнении:

SELECT
id,
post_number,
sort_order,
ROW_NUMBER() OVER (
    PARTITION BY
    topic_id
    ORDER BY
    created_at,
    post_number
) AS new_post_number
FROM
posts

Пытаясь вручную воссоздать задачу rake, я выполнил:

WITH ordered_posts AS (
  SELECT
    id,
    ROW_NUMBER() OVER (
      PARTITION BY
        topic_id
      ORDER BY
        created_at,
        post_number
    ) AS new_post_number
  FROM
    posts
  /*where*/
)
SELECT
  p.post_number,
  p.sort_order,
  o.new_post_number
FROM
  posts AS p, ordered_posts AS o
WHERE
  p.id = o.id

результат:

Что объясняет, почему задача rake ничего не делает — она считает, что делать нечего… В задаче rake есть дополнительное условие where, сравнивающее post_number с new_post_number, а не sort_order.

Теперь я вручную выполнил в базе данных:

WITH ordered_posts AS (
  SELECT
    id,
    ROW_NUMBER() OVER (
      PARTITION BY
        topic_id
      ORDER BY
        created_at,
        post_number
    ) AS new_post_number
  FROM
    posts
  /*where*/
)
UPDATE
  posts AS p
SET
  sort_order = o.new_post_number
FROM
  ordered_posts AS o
WHERE
  p.id = o.id AND
  p.sort_order <> o.new_post_number

и теперь посты отображаются в правильном порядке.

Я до сих пор не понимаю, как вы пришли к такому состоянию. Единственное место, где мы с этим работаем, — это при перемещении постов.

Создатель поста просто устанавливает sort_order равным post_number.

В долгосрочной перспективе я даже не уверен, что хочу сохранять колонку sort_order, она кажется своего рода «подводным камнем».

Есть ли здесь какие-либо задействованные плагины?

Я тоже этого не понимаю. Просматривая код, я не нашёл никаких причин этому. Похоже, что что-то изменяет порядок сортировки, но я не вижу, что именно.

Я думал, что они вышли из порядка после обновления, так как сообщения, которые оказались не на своих местах, обычно были гораздо старше и ранее отображались в ожидаемом месте. Когда я выполнил SQL-запрос выше, всё казалось в порядке, но на прошлой неделе несколько совершенно новых постов тоже теперь отображаются не по порядку. Мне кажется, что затрагиваемые посты всегда являются ответами на другой пост. Например:

У нас установлены следующие плагины:

Думаю, плагин question-answer изменяет порядок сортировки, но это должно влиять только на темы вопросов, а не на обычные.

У меня та же проблема. Ранее я сталкивался с ошибками 502 при перемещении сообщений в длинных темах, не уверен, связано ли это с чем-то. У меня также установлен плагин «Вопросы и ответы», но после его отключения сообщения всё ещё появляются в конце тем.

Очень вероятно, что это не действительно поддерживаемый или официальный плагин. Поле sort_order используется в ядре Discourse непоследовательно, и мы рассматриваем возможность удаления этого столбца.

Переношу это в Support, так как вижу здесь ошибку в неофициальном плагине.

@angus Можешь посмотреть эту проблему? Я установил этот плагин, и ответы на всём сайте стали появляться в неправильном порядке. Я только что удалил плагин, но ответы всё ещё отображаются не по порядку.

Я провел тест на одном посте, чтобы проверить, исправит ли следующая команда некорректный порядок ответов в посте (после удаления плагина Q&A).

rake posts:reorder_posts[1896]

К сожалению, посты по-прежнему отображаются в неправильном порядке.

Привет, извините, что вы столкнулись с этой проблемой. Пожалуйста, публикуйте любые обновления по этому вопросу здесь: Question Answer Plugin. @mbcahyono или я отвечу в ближайшее время. Это не общий вопрос по поддержке Discourse.