Как отсортировать ответы по теме по дате

Здравствуйте. Не знаю, возможно ли это, и если да, то я много гуглил, но ничего об этом не нашёл. Однако я хотел бы отсортировать все ответы по всем темам моего форума по дате создания.

Я занимаюсь миграцией данных со старого форума на новый Discourse. Для этого я воссоздаю темы и ответы через API, чтобы отправлять их в Discourse с той датой, когда ответ был изначально создан. Это работает отлично: когда я перехожу к созданным ответам в Discourse, вижу там оригинальную дату.

Но, несмотря на то, что все ответы имеют оригинальную дату, они сортируются в порядке их создания через API. Не знаю, является ли это ошибкой или задумано так, или существует ли способ сортировать их по дате, указанной в запросе POST API. Если такой способ есть, буду рад получить помощь по этому вопросу. Привет всем.

Я использую версию 2.8.8.

Не делайте этого. Вам следует использовать скрипт импорта. Вы можете посмотреть примеры по адресу discourse/script/import_scripts at main · discourse/discourse · GitHub и поискать здесь инструкции по запуску скриптов импорта для других форумов.

Сообщения отображаются в порядке их создания. Поэтому вам пришлось бы заставить ваш скрипт API (который вам на самом деле не стоит использовать) создавать их в правильном порядке.

Хм, спасибо за ответ. Я думал об использовании скрипта некоторое время назад, но так как в Discourse много связей между таблицами, я решил работать через API. Но есть ли способ создать скрипт, который будет вставлять данные в одну таблицу, а Discourse сам обработает остальную часть связей? Это могло бы облегчить мне задачу.

Но, я имею в виду, что миграция через API пока работает. Неужели смысл в возможности отправлять атрибут created_at на эндпоинт для создания постов, если Discourse всё равно не будет сортировать их по нему? Разве это не должно быть запросом на новую функцию?

Да, конечно, есть! Я приводил примеры по ссылкам.

Если бы это было правдой, вы бы не писали здесь. :wink:

Нет, потому что способ решения вашей проблемы — использовать один из десятков примеров, на которые я дал ссылки. Я обещаю, что это будет намного, намного проще. Я написал несколько скриптов импорта ещё до того, как толком выучил Ruby.

Даже если вы захотите использовать API, вам всё равно нужно создавать посты в порядке поля created_at. Есть способы отсортировать их с помощью плагина (или, возможно, компонента темы?), но вам действительно не стоит этого делать.

@JammyDodger указывает, что существует задача Rake:

    rake posts:reorder_posts

Это может решить вашу проблему. Если вы импортируете несколько десятков тем и несколько сотен постов, возможно, стоит попробовать этот вариант.

Понял. Я продолжу следовать своей идее, просто хотел уточнить насчёт атрибута created_at в POST-запросе при создании поста — он, похоже, бесполезен, если посты нельзя сортировать по нему. В любом случае, спасибо.

Просто к сведению: причина, по которой элементы не сортируются автоматически по дате создания, заключается в том, что система разработана с учётом возможности перемещения постов из одной темы в другую. В таком сценарии было доказано, что смешивание постов при совпадении дат менее желательно.

Вот более раннее обсуждение этой темы:

Касательно наилучшего подхода к миграции, я согласен с Джей. Скорее всего, вам лучше ориентироваться на существующие практики. Хотя это не веб-API, текущие скрипты полагаются на некий низкоуровневый «миграционный API», учитывающий эти нюансы.

Веб-API в основном разработан как интерфейс для фронтенд-приложения Discourse. Хотя он успешно используется для различных интеграций, он оптимизирован для своей основной цели.

Это не бесполезно, оно устанавливает дату created_at, как и заявлено. Просто сортируйте свои сообщения по created_at перед их созданием.