Здравствуйте. Не знаю, возможно ли это, и если да, то я много гуглил, но ничего об этом не нашёл. Однако я хотел бы отсортировать все ответы по всем темам моего форума по дате создания.
Я занимаюсь миграцией данных со старого форума на новый Discourse. Для этого я воссоздаю темы и ответы через API, чтобы отправлять их в Discourse с той датой, когда ответ был изначально создан. Это работает отлично: когда я перехожу к созданным ответам в Discourse, вижу там оригинальную дату.
Но, несмотря на то, что все ответы имеют оригинальную дату, они сортируются в порядке их создания через API. Не знаю, является ли это ошибкой или задумано так, или существует ли способ сортировать их по дате, указанной в запросе POST API. Если такой способ есть, буду рад получить помощь по этому вопросу. Привет всем.
Сообщения отображаются в порядке их создания. Поэтому вам пришлось бы заставить ваш скрипт API (который вам на самом деле не стоит использовать) создавать их в правильном порядке.
Хм, спасибо за ответ. Я думал об использовании скрипта некоторое время назад, но так как в Discourse много связей между таблицами, я решил работать через API. Но есть ли способ создать скрипт, который будет вставлять данные в одну таблицу, а Discourse сам обработает остальную часть связей? Это могло бы облегчить мне задачу.
Но, я имею в виду, что миграция через API пока работает. Неужели смысл в возможности отправлять атрибут created_at на эндпоинт для создания постов, если Discourse всё равно не будет сортировать их по нему? Разве это не должно быть запросом на новую функцию?
Нет, потому что способ решения вашей проблемы — использовать один из десятков примеров, на которые я дал ссылки. Я обещаю, что это будет намного, намного проще. Я написал несколько скриптов импорта ещё до того, как толком выучил Ruby.
Даже если вы захотите использовать API, вам всё равно нужно создавать посты в порядке поля created_at. Есть способы отсортировать их с помощью плагина (или, возможно, компонента темы?), но вам действительно не стоит этого делать.
@JammyDodger указывает, что существует задача Rake:
rake posts:reorder_posts
Это может решить вашу проблему. Если вы импортируете несколько десятков тем и несколько сотен постов, возможно, стоит попробовать этот вариант.
Понял. Я продолжу следовать своей идее, просто хотел уточнить насчёт атрибута created_at в POST-запросе при создании поста — он, похоже, бесполезен, если посты нельзя сортировать по нему. В любом случае, спасибо.
Просто к сведению: причина, по которой элементы не сортируются автоматически по дате создания, заключается в том, что система разработана с учётом возможности перемещения постов из одной темы в другую. В таком сценарии было доказано, что смешивание постов при совпадении дат менее желательно.
Вот более раннее обсуждение этой темы:
Касательно наилучшего подхода к миграции, я согласен с Джей. Скорее всего, вам лучше ориентироваться на существующие практики. Хотя это не веб-API, текущие скрипты полагаются на некий низкоуровневый «миграционный API», учитывающий эти нюансы.
Веб-API в основном разработан как интерфейс для фронтенд-приложения Discourse. Хотя он успешно используется для различных интеграций, он оптимизирован для своей основной цели.