Новая тема не переходит в категорию «Без категории»

Здравствуйте,

Когда один из моих пользователей (с ролью «лидер») пытается создать новую тему, поле категории пустое, и при нажатии кнопки «Создать тему» возникает ошибка 404:

Когда я (сотрудник) пытаюсь создать новую тему, поле категории также пустое, но я получаю ошибку: Вы передали некорректные параметры в запросе: категория.

Я нашёл настройку:

Разрешить создание тем без указания категории. ВНИМАНИЕ: Если есть тем без категории, необходимо их переклассифицировать перед отключением этой опции.

Я не помню, чтобы включал эту настройку, но она активна — полагаю, это настройка по умолчанию, но не уверен.

Я также посмотрел настройки категории «Без категории»:

Эта категория особенная. Она используется как категория по умолчанию для новых тем, у которых не выбрана категория. Если вы хотите предотвратить такое поведение и обязать выбирать категорию, отключите эту настройку здесь. Если вы хотите изменить имя или описание, перейдите в Настроить / Текстовое содержимое.

В краткосрочной перспективе меня беспокоит, что пользователи сталкиваются с плохим опытом и не могут публиковать сообщения (ошибка 404).

Я попытался поискать ответы на свои вопросы на meta.discourse.org:

Вопрос 1: Почему поле категории пустое, когда я пытаюсь создать новую тему? (оно не пустое, когда я публикую на meta.discourse.org)

Вопрос 2: Если включена опция ‘Разрешить создание тем без указания категории’, почему я получаю ошибку? (Я подозреваю, что «Без категории» на самом деле означает «без указанной категории», но она описывается как ‘[…] категория по умолчанию для новых тем, у которых не выбрана категория.’).

Мне нравится поведение meta.discourse.org, где по умолчанию выбирается категория «Общее» вместо «Без категории», но я не уверен, какой подход правильный:

a) Переименовать «Без категории» в «Общее». (Примечание: я нашёл пост от 2016 года, в котором говорилось, что это плохая идея, и что «Без категории» приравнивается к значению null в базе данных.)

ИЛИ

b) Создать категорию «Общее», переместить все темы из «Без категории» в «Общее» (как?), установить «Общее» как категорию по умолчанию для новых постов и отключить опцию ‘Разрешить создание тем без указания категории’.

Буду благодарен за любые советы или ссылки на соответствующую документацию.

С наилучшими пожеланиями,

Стивен

PS: К слову, мы являемся проектом с открытым исходным кодом (OSS), и этот бесплатный экземпляр Discourse был предоставлен замечательными людьми по адресу https://www.discourse.org

Я тоже это заметил. Но я отключил некатегоризированные, и в таком случае должно выбираться верхнее основное. По умолчанию отображается то же самое (пустое) поле категории.

1 лайк

Спасибо @MarcP!

Думаю, это может быть ошибкой, но я не хотел делать поспешных выводов.
С.

Привет, Стивен,

Какая версия Discourse работает на вашем сайте?

Некатегоризированная «категория» недавно была заменена новой общей категорией. Появилась ли на вашем сайте новая категория с таким названием? Была ли у вас ранее общая категория?

Да, у меня раньше была общая категория. Я использую последнюю сборку, но заметил это пару недель назад.

Да, это тоже кажется недавним поведением для меня.

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

Возможно, не все случаи были охвачены. Мы поручим кому-нибудь разобраться в этом. :+1:

5 лайков

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

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

Например:
Если вы создаёте новую категорию для этих целей, её имя может быть, например: General, и вам следует также проверить идентификатор категории. В данном примере он будет равен 9.

Категория успешно создана, но при открытии редактора она не станет категорией по умолчанию. Давайте настроим скрытую настройку сайта.

Настройка category_id для категории General

Примечание: category_id=9 приведён только в этом примере как правильный идентификатор категории. У вашей новой категории, скорее всего, будет другой номер.

cd /var/discourse
./launcher enter app
rails c
SiteSetting.general_category_id=9
exit
exit

После этого при открытии редактора категория с category_id=9General станет категорией по умолчанию.

2 лайка

Вы пересобрали проект после переименования general?

Мы не переименовывали general — у нас есть только «uncategorized», и мы его не переименовывали.

Discourse обновлён: 14 часов назад

Мы — проект с открытым исходным кодом, и это бесплатный экземпляр Discourse (вежливо предоставленный замечательными людьми по адресу https://www.discourse.org), поэтому обновления происходят автоматически без нашего вмешательства.

Категория по-прежнему отображается пустой

@Дон

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

С наилучшими пожеланиями,

Стивен

1 лайк

Для большинства команды сейчас выходные, но мы исправим это, как только кто-нибудь освободится. :slightly_smiling_face::+1:

4 лайка

Я просто хочу убедиться, чтобы минимизировать неудобства для конечных пользователей:

  1. Нужно ли мне создать категорию «Общее» заранее?

  2. Придется ли мне переместить все темы с категорией «Без категории» в «Общее» после внесения изменений в конфигурацию?

Спасибо за помощь.

Стивен

Если вы стремитесь к такому результату, а не к категории #uncategorized по умолчанию, вы можете безопасно создать новую категорию #general, переместить все темы из #uncategorized в неё с помощью инструмента массовой обработки, а затем в настройках администратора отключить опцию «Разрешить темы без категории» (хотя это не исправит выпадающий список).

Однако это займёт у члена команды всего пару минут, чтобы всё исправить, а также вручную обновить скрытую настройку general_category_id, поэтому, возможно, вам просто стоит подождать. :slightly_smiling_face:

4 лайка

Спасибо, это очень хорошее объяснение, и я разобрался. Думаю, эту тему стоит перенести в Support, так как это не баг, и предлагаю пометить ваш ответ как решение.

1 лайк

Просто для уточнения:

  • У новых экземпляров Discourse категория «Общее» является категорией по умолчанию при создании новой темы.

  • Наш экземпляр существует с тех пор, когда категорией по умолчанию была категория «Без категории».

Исправление заключается в том, чтобы установить SiteSetting.general_category_id равным ID категории «Без категории».

Эта команда:

SiteSetting.general_category_id=<id новой категории>

  • Экземпляры, у которых всё ещё есть категория «Без категории», должны установить указанное выше значение при обновлении.
1 лайк

Всё исправлено. Мы перешли на использование категории «Общее» вместо «Без категории», и система теперь корректно предоставляет категорию по умолчанию.

Спасибо всем, кто помог выявить эту проблему, и особая благодарность @fzngagan за быстрое и профессиональное решение.

С уважением,

Стивен

5 лайков

Для тех, кто случайно удалил созданный вручную категорию «General» до этого исправления:

Теперь доступно дополнительное исправление, которое очистит значение SiteSetting.general_category_id, если оно указывает на несуществующую категорию:

3 лайка