用户删除了该类别的“关于”帖子

用户删除了他们所有的帖子,其中一个帖子是某个分类的“关于”帖子。我们恢复了该帖子并将其所有权更改为系统账户,但管理员仍然看到它显示为“已删除”,并且当非管理员访问该帖子时会显示错误:

有问题的帖子(会出错):About the Music category - Music - KGLW.net Forum

分类:Music - KGLW.net Forum

有什么办法可以解决这个问题吗?

(是否应该将所有分类的“关于”帖子都分配给系统账户以避免这种情况?)

3 个赞

您好,

不确定这是否会奏效,但请尝试重新构建帖子的 HTML。您可以通过点击三个点 → 扳手 → “重新构建 HTML” 来完成此操作。

1 个赞

目前尚不完全清楚他们是如何删除“关于”主题的,因为它们本应是不可删除的。 :thinking:

您能否更详细地说明一下这是如何发生的?是他们创建的类别吗?

4 个赞

当您在用户管理页面上使用“删除所有帖子”按钮时,关于主题将被删除。(在其他情况下,所有权将转移给 @system

您可以创建一个新类别,并将所有主题移至该类别,然后删除旧类别。但这更像是一种变通方法,而不是修复。

这是一个不幸的副作用。:thinking:

不过,我刚刚在我的测试站点上重现了这个问题,取消删除后它又回来了,所以我不太确定这个具体问题是什么。

可以通过 Rails 控制台将“关于”主题的 topic_id 换成一个新的,但通过 UI 进行“新的分类切换”可能是一个更简单的选项。

2 个赞

当您在取消删除帖子之前将其所有权更改为系统时,就会出现此问题。

2 个赞

我可能需要一个分步指南,以确保我们做的事情相同。看起来用户被删除了,而不是只删除了帖子?

3 个赞

有两个问题结合起来尤其不幸。

  1. 当您在用户的管理页面上使用“删除所有帖子”时,“关于类别”的帖子会被删除。(但您可以取消删除它)

  2. 当您删除了作者也被删除的帖子,并且在取消删除帖子之前更改所有权,您将无法取消删除帖子。(作为一种变通方法,您可以删除该主题并取消删除它。这将取消删除第一个帖子)

因此,当您:

  • 创建一个测试用户和测试类别,
  • 将测试用户设置为“关于类别”主题的所有者,
  • 从用户的管理页面删除他们的所有帖子,
  • (可选)创建另一个由测试用户拥有的主题,
  • (可选)使用另一个用户回复这两个主题,
  • 删除测试用户,
  • 更改“关于”主题(以及其他主题)的所有权,
  • 尝试取消删除帖子,

您会收到一个错误,因为您无法取消删除帖子。附注:主题中的回复对其他用户可见,但他们看不到第一个帖子。

对于第 2 点的变通方法不起作用,因为您不允许删除“关于”主题。

6 个赞

是的,我认为用户创建了该类别。

“Rebuild HTML”似乎没有起到任何作用。

我想我们可以创建一个新类别并进行切换,但是那样的话,订阅/静音/其他操作了原始类别的用户是否需要对新类别重新进行操作?

我不怕 Rails 控制台,所以如果分配一个新的 topic_id 是更“正确”的结构化方式,那么我倾向于这样做。但我希望在具体命令方面得到一些指导;会是类似 Category.find(10).topic_id = 723……这样的命令吗?

另一方面:

……也许这是更快的解决方法?(尽管我只在扳手图标菜单中看到“Archive Topic”而不是“Delete Topic”……)

我没有像其他人那样彻底测试过(谢谢你们!!),但在我看来,第一个帖子中提到的问题的修复相当简单。

  • 不允许在用户管理中删除关于主题(由站点版主/管理员操作)

当尝试上述操作时,阻止它并显示一条信息性错误消息。我将其移至 Bug,因为在上述情况下可以删除关于主题,这是一个 bug。

我刚刚创建了一个测试用户,并用它创建了一个类别,然后从用户管理中删除了该用户。即使它有一个主题,它也允许我直接删除用户。关于主题的作者身份已移交给系统用户!所以至少在这个方面,这个用例似乎相当安全。

我还尝试了自我删除的情况(必须先降级用户才能看到删除帐户按钮)。删除该用户也将主题作者身份移交给了系统。此外,我看到 delete user self max post count 的默认值设置为 1,这意味着默认情况下,如果用户拥有一个以上的主题,则用户无法自行删除。所以我们无论如何在这里都是安全的。

我测试了通过用户管理删除用户。有趣的是,只要只有一个关于主题,我就没有得到帖子删除按钮。但在创建第二个主题后,我确实得到了帖子删除按钮。选择它并输入长文本进行确认然后成功了——我能够删除用户的帖子,包括关于主题。终于可以重现了! :wink:

最后,我也能够通过批量操作删除关于主题。又一个重现! 哎呀,现在我发现我无法重现批量删除关于主题的操作。它只是默默地失败了。

鉴于以上情况,我们可以忽略用户删除(通过用户管理和自我删除)的情况,因为作者身份已移交给系统。

1 个赞

我也尝试将关于帖子移到另一个主题。它奏效了,然后出现一个删除计时器,但主题在 x 天后并未被删除。计时器只是消失了。所以这工作正常。

1 个赞

@alxndr,你解决你的情况了吗?

2 个赞

这也许可以防止它将来再次发生。

话虽如此,我现在应该如何从用户尝试读取此类别“关于”帖子时看到错误页面,即使该帖子由 system 用户拥有,这种情况中恢复过来?

我还没有尝试任何事情;我希望有人能先回应“是的,这是正确的命令”或“不,不要那样做,它会毁了一切”……

2 个赞

我相信这可能是我之前尝试时使用的格式:

Category.where(id: CAT_ID).update(topic_id: NEW TOPIC_ID)

不过我也在想,是否可以通过 API 来取消删除那个原始主题。:thinking:

@alxndr 您能否确认您是自行托管,而不是使用我们的托管服务?如果您使用的是我们的托管服务或切换到我们的托管服务,您可以联系我们的团队寻求支持,我们的技术人员之一将帮助您解决此问题。

如果我在您的情况下,我会创建一个新类别并将所有主题移至新类别。这似乎是最直接的方法。

如果您决定尝试使用 rails 控制台或 API,那么您将进入未知领域,因此请务必先对您的网站进行完整备份,以防需要恢复更改!

1 个赞

:slight_smile: 听起来你不信任我的建议 @tobiaseigen :slight_smile:

使用 API 会比 Rails 控制台更安全,只是不清楚在这种情况下它是否能成功恢复此特定主题。


我曾不确定 API 是否会奏效,因为在 UI 中尝试类似操作被阻止了,但我似乎取得了一些成功 (:partying_face:)。

在这种情况下,我使用了恢复帖子的端点,而不是恢复主题(这是帖子中的“撤销删除”选项试图做的):

/posts/POST_ID/recover

4 个赞

是的,自行托管。

1 个赞

“取消删除此帖子”按钮似乎使用了此端点,但返回了 403 错误,errorThrown 为空,textStatus: "error"

但是,您是说通过 API 使用相同的路由(而不是 Web UX)是否有效?

根据我的测试,取消删除按钮试图使用主题恢复端点(/t/TOPIC_ID/recover)并抛出 403 错误。但当我改用帖子恢复版本时,它似乎正常工作了。

你能再检查一下吗?

2 个赞

啊,谢谢你的澄清,你说得对。

我不清楚如何识别帖子的 ID;类别 ID 是 10,我认为主题 ID 是 723?
更新: 啊哈,找到了!article DOM 元素上有一个 data-post-id……

我在 API 文档 上没有看到这个端点……它应该是 PUT 请求吗?需要带任何数据吗?
更新: 是的,是 PUT 请求,且不带数据——成功了!谢谢你 @JammyDodger!!

2 个赞