新主题未默认到未分类

您好,

当我的用户(“leader”角色)尝试创建新主题时,类别为空,如果他们单击创建主题按钮,他们会收到 404 错误:

当我(员工)尝试创建新主题时,类别仍然是空的,但我收到一个错误 You supplied invalid parameters to the request: category

我发现了一个设置:

允许不带类别的帖子。警告:如果存在任何未分类的帖子,则必须在关闭此设置之前重新对其进行分类。

我不记得启用它,但它已启用 - 我认为这是默认设置,但不确定。

我查看了未分类的类别设置:

此类别是特殊的。它用作未选择类别的帖子的默认类别。如果要阻止此行为并强制选择类别,请在此处禁用该设置。如果要更改名称或描述,请转到 自定义 / 文本内容

短期内,我担心我们的用户体验不佳且无法发帖。(404 错误)

我尝试在 meta.discourse.org 上搜索以找到问题的答案:

问题 1:为什么当我尝试创建新主题时,类别字段为空? (当我发帖到 meta.discourse.org 时,它不是空的)

问题 2:如果启用了“允许不带类别的帖子”,为什么我会收到错误? (我怀疑“未分类”实际上意味着“没有类别”,但它被描述为“[…]未选择类别的帖子的默认类别。”)

我实际上喜欢 meta.discourse.org 的行为;它默认为“general”而不是“uncategorised”,但不确定哪种方法是正确的;
a) 将“Uncategorised”重命名为“general”。(注意:我发现一篇帖子 - 来自 2016 年 - 表明这是一个坏主意,并将“Uncategorised”等同于数据库中的“null”。)

或者

b) 创建一个“general”类别,将所有未分类的帖子移到“general”(如何?),将“general”设置为新帖子的默认值,并禁用“允许不带类别的帖子”。

任何建议 - 或指向相关文档的链接 - 都将不胜感激。

此致,

Stephen

附注 顺便说一句,我们是一个开源项目,这是一个由 https://www.discourse.org 的好心人提供的免费 discourse 实例。

我也注意到了这一点。但我已经禁用了未分类,但它仍然应该在这种情况下选择顶级类别。它显示与默认值相同的(空)类别字段。

1 个赞

感谢 @MarcP

我认为这可能是一个 bug,但我不愿过早下结论。
s.

斯蒂芬:

你的网站运行的是哪个版本的 Discourse?

“未分类”的“类别”最近被一个新的通用类别取代了。你的网站上是否出现了同名的类别?你以前有过通用类别吗?

是的,我以前有一个通用类别。正在运行最新的构建,但注意到它已经有几周了?

是的,这似乎也是我最近才出现的行为。

此问题本应通过此提交进行修复,但我注意到您的网站已更新以包含它:

有可能它并未涵盖所有情况。我们会安排人员进行查看。:+1:

5 个赞

嗯,当我启用 允许未分类主题 时,未分类的类别仍然出现在我的类别页面上。即使在我重命名了我的通用类别之后也是如此。

未分类 (Uncategorized) 类别现在不再是默认的站点设置,自从 Discourse 启用 常规 (General) 类别以来。在新安装的 Discourse 中,有一个默认的 常规 (General) 类别。因此,当您打开撰写器时,自动选择的类别是 常规 (General)。但是,在没有常规类别的旧安装中,我认为任何类别都可以是常规类别。我认为这仅仅意味着在这种情况下,撰写器默认类别。因此,如果您创建一个名为 常规 (General) 的类别,这还不够。您还必须使用隐藏的站点设置 general_category_id 来设置类别 ID。

例如:
如果您为此常规目的创建一个新类别。类别名称可以例如:常规 (General),并且您还应该检查类别 ID。现在在这个例子中,它将是 9

类别已成功创建,但如果您打开撰写器,它将不是默认类别,所以让我们设置隐藏的站点设置。

设置 category_id 为常规类别

注意:在此示例中,category_id=9 只是正确的类别 ID。您新创建的类别可能具有不同的 category_id 号码。

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

在此之后,当您打开撰写器时,category_id=9常规 (General) 类别将是默认类别。

2 个赞

重命名 general 后,您是否已重建?

我们没有重命名 general - 我们只有‘uncategorized’,并且我们没有重命名它。

Discourse 更新:14 小时前

我们是一个开源项目,这是一个免费的 Discourse 实例(由 https://www.discourse.org 的好心人提供),因此升级会在没有我们干预的情况下自动进行。

分类仍然显示为空白

@Don

谢谢 - 这是一个托管实例,所以我不知道如何获得 shell 访问权限来设置隐藏的站点设置。

此致
Stephen

1 个赞

对大多数团队成员来说,现在是周末,但一旦有人有空,我们就可以尽快为您解决。:slightly_smiling_face::+1:

4 个赞

我只想确认一下——这样我就可以最大限度地减少对最终用户的影响:

  1. 我是否需要创建一个“通用”类别来做准备?

  2. 配置更改后,我是否需要将“未分类”类别下的所有主题移至“通用”类别?

感谢您的帮助
Stephen

如果您希望实现此结果,而不是将“未分类”作为默认值,那么您可以创建一个新的“常规”类别,使用批量工具将所有“未分类”主题移入其中,然后在管理员设置中禁用“允许未分类主题”(但这不会修复下拉菜单)。

不过,这只需要团队成员几分钟时间即可修复,同时手动更新隐藏的 general_category_id 设置,所以您可能只需要等待即可。:slightly_smiling_face:

4 个赞

谢谢,这个解释非常好,我已经解决了。我认为这个话题应该放在 Support,因为它不是一个 bug,我建议将您的回复标记为解决方案。

1 个赞

这样我就明白了

  • 新的 discourse 实例有一个“General”类别,这是发布新主题时的默认类别。

  • 我们的实例来自一个默认类别是“uncategorised”的时代。
    修复方法是将 SiteSetting.general_category_id 设置为 Uncategorised 类别 ID。

此命令:

SiteSetting.general_category_id=<new category id>

  • 仍拥有 Uncategorised 类别的实例在升级时应设置上述设置。
1 个赞

一切已解决。我们改用“General”而不是“uncategorised”,系统已正确提供默认类别。

感谢所有帮助诊断此问题的人员,特别感谢 @fzngagan 如此快速且专业地解决了此问题。

此致

Stephen

5 个赞

对于任何在本次修复之前手动删除了默认“General”分类的用户:

现在有一个额外的修复程序,可以清理 SiteSetting.general_category_id 中设置的不存在的分类:

3 个赞