Мы используем функцию external_id для автоматического создания тем в нашей интеграции. Однако я заметил, что если удалить тему, то создать новую с тем же external_id не удаётся — вместо этого возвращается ошибка:
{'action': 'create_post', 'errors': ['External has already been taken']}
Возможно ли каким-либо образом повторно использовать тот же external_id после удаления темы, которая его использовала?
Я знаю о обходном пути, обсуждаемом в другом месте, с использованием пользовательских полей для объектов User, но, похоже, объекты Topic не поддерживают пользовательские поля. Есть ли способ это сделать?
Это потому, что удалённые темы помечаются как удалённые, но не удаляются из базы данных. Попытка снова связать идентификатор с другой темой кажется плохой идеей (хотя вы об этом не спрашивали). Вы можете принудительно удалить тему по-настоящему (Введение функциональности постоянного удаления постов может быть решением).
Привет, @pfaffman!
Большое спасибо за предложение и за то, что напомнили о необходимости более тщательного подхода к повторному использованию external_id в целом.
Проблема заключается в том, что значение, которое мы используем для external_id темы, сложно изменить (требуется ручное вмешательство) из-за ограничений в приложении, с которым мы интегрируемся (CatalogIt — предоставляет API только для чтения). В процессе разработки мы часто вручную удаляем и автоматически воссоздаем темы (вся работа интеграции сводится к созданию тем для обсуждений по элементам в CatalogIt, когда пользователь нажимает ссылку «обсудить этот элемент»), что вынуждает нас каждый раз изменять это значение. Если после удаления темы значение не обновить и пользователь позже нажмет ссылку «обсудить этот элемент», возникнет ошибка «external уже занят».
Возможно, вместо удаления лучше использовать архивирование, либо, возможно, существует механизм скрытия/отображения, на который мы можем опереться. Я не знаком с Discourse, потребуется исследование. Я займусь этим и посмотрю, что смогу найти.