用户删除了他们所有的帖子,其中一个帖子是某个分类的“关于”帖子。我们恢复了该帖子并将其所有权更改为系统账户,但管理员仍然看到它显示为“已删除”,并且当非管理员访问该帖子时会显示错误:
有问题的帖子(会出错):About the Music category - Music - KGLW.net Forum
有什么办法可以解决这个问题吗?
(是否应该将所有分类的“关于”帖子都分配给系统账户以避免这种情况?)
用户删除了他们所有的帖子,其中一个帖子是某个分类的“关于”帖子。我们恢复了该帖子并将其所有权更改为系统账户,但管理员仍然看到它显示为“已删除”,并且当非管理员访问该帖子时会显示错误:
有问题的帖子(会出错):About the Music category - Music - KGLW.net Forum
有什么办法可以解决这个问题吗?
(是否应该将所有分类的“关于”帖子都分配给系统账户以避免这种情况?)
您好,
不确定这是否会奏效,但请尝试重新构建帖子的 HTML。您可以通过点击三个点 → 扳手 → “重新构建 HTML” 来完成此操作。
目前尚不完全清楚他们是如何删除“关于”主题的,因为它们本应是不可删除的。 ![]()
您能否更详细地说明一下这是如何发生的?是他们创建的类别吗?
当您在用户管理页面上使用“删除所有帖子”按钮时,关于主题将被删除。(在其他情况下,所有权将转移给 @system)
您可以创建一个新类别,并将所有主题移至该类别,然后删除旧类别。但这更像是一种变通方法,而不是修复。
这是一个不幸的副作用。![]()
不过,我刚刚在我的测试站点上重现了这个问题,取消删除后它又回来了,所以我不太确定这个具体问题是什么。
可以通过 Rails 控制台将“关于”主题的 topic_id 换成一个新的,但通过 UI 进行“新的分类切换”可能是一个更简单的选项。
我可能需要一个分步指南,以确保我们做的事情相同。看起来用户被删除了,而不是只删除了帖子?
有两个问题结合起来尤其不幸。
当您在用户的管理页面上使用“删除所有帖子”时,“关于类别”的帖子会被删除。(但您可以取消删除它)
当您删除了作者也被删除的帖子,并且在取消删除帖子之前更改所有权,您将无法取消删除帖子。(作为一种变通方法,您可以删除该主题并取消删除它。这将取消删除第一个帖子)
因此,当您:
您会收到一个错误,因为您无法取消删除帖子。附注:主题中的回复对其他用户可见,但他们看不到第一个帖子。
对于第 2 点的变通方法不起作用,因为您不允许删除“关于”主题。
是的,我认为用户创建了该类别。
“Rebuild HTML”似乎没有起到任何作用。
我想我们可以创建一个新类别并进行切换,但是那样的话,订阅/静音/其他操作了原始类别的用户是否需要对新类别重新进行操作?
我不怕 Rails 控制台,所以如果分配一个新的 topic_id 是更“正确”的结构化方式,那么我倾向于这样做。但我希望在具体命令方面得到一些指导;会是类似 Category.find(10).topic_id = 723……这样的命令吗?
另一方面:
……也许这是更快的解决方法?(尽管我只在扳手图标菜单中看到“Archive Topic”而不是“Delete Topic”……)
我没有像其他人那样彻底测试过(谢谢你们!!),但在我看来,第一个帖子中提到的问题的修复相当简单。
当尝试上述操作时,阻止它并显示一条信息性错误消息。我将其移至 Bug,因为在上述情况下可以删除关于主题,这是一个 bug。
我刚刚创建了一个测试用户,并用它创建了一个类别,然后从用户管理中删除了该用户。即使它有一个主题,它也允许我直接删除用户。关于主题的作者身份已移交给系统用户!所以至少在这个方面,这个用例似乎相当安全。
我还尝试了自我删除的情况(必须先降级用户才能看到删除帐户按钮)。删除该用户也将主题作者身份移交给了系统。此外,我看到 delete user self max post count 的默认值设置为 1,这意味着默认情况下,如果用户拥有一个以上的主题,则用户无法自行删除。所以我们无论如何在这里都是安全的。
我测试了通过用户管理删除用户。有趣的是,只要只有一个关于主题,我就没有得到帖子删除按钮。但在创建第二个主题后,我确实得到了帖子删除按钮。选择它并输入长文本进行确认然后成功了——我能够删除用户的帖子,包括关于主题。终于可以重现了! ![]()
最后,我也能够通过批量操作删除关于主题。又一个重现! 哎呀,现在我发现我无法重现批量删除关于主题的操作。它只是默默地失败了。
鉴于以上情况,我们可以忽略用户删除(通过用户管理和自我删除)的情况,因为作者身份已移交给系统。
我也尝试将关于帖子移到另一个主题。它奏效了,然后出现一个删除计时器,但主题在 x 天后并未被删除。计时器只是消失了。所以这工作正常。
@alxndr,你解决你的情况了吗?
这也许可以防止它将来再次发生。
话虽如此,我现在应该如何从用户尝试读取此类别“关于”帖子时看到错误页面,即使该帖子由 system 用户拥有,这种情况中恢复过来?
我还没有尝试任何事情;我希望有人能先回应“是的,这是正确的命令”或“不,不要那样做,它会毁了一切”……
我相信这可能是我之前尝试时使用的格式:
Category.where(id: CAT_ID).update(topic_id: NEW TOPIC_ID)
不过我也在想,是否可以通过 API 来取消删除那个原始主题。![]()
@alxndr 您能否确认您是自行托管,而不是使用我们的托管服务?如果您使用的是我们的托管服务或切换到我们的托管服务,您可以联系我们的团队寻求支持,我们的技术人员之一将帮助您解决此问题。
如果我在您的情况下,我会创建一个新类别并将所有主题移至新类别。这似乎是最直接的方法。
如果您决定尝试使用 rails 控制台或 API,那么您将进入未知领域,因此请务必先对您的网站进行完整备份,以防需要恢复更改!
哈
听起来你不信任我的建议 @tobiaseigen ![]()
使用 API 会比 Rails 控制台更安全,只是不清楚在这种情况下它是否能成功恢复此特定主题。
我曾不确定 API 是否会奏效,因为在 UI 中尝试类似操作被阻止了,但我似乎取得了一些成功 (
)。
在这种情况下,我使用了恢复帖子的端点,而不是恢复主题(这是帖子中的“撤销删除”选项试图做的):
/posts/POST_ID/recover
是的,自行托管。
“取消删除此帖子”按钮似乎使用了此端点,但返回了 403 错误,errorThrown 为空,textStatus: "error"。
但是,您是说通过 API 使用相同的路由(而不是 Web UX)是否有效?
根据我的测试,取消删除按钮试图使用主题恢复端点(/t/TOPIC_ID/recover)并抛出 403 错误。但当我改用帖子恢复版本时,它似乎正常工作了。
你能再检查一下吗?
啊,谢谢你的澄清,你说得对。
我不清楚如何识别帖子的 ID;类别 ID 是 10,我认为主题 ID 是 723?
更新: 啊哈,找到了!article DOM 元素上有一个 data-post-id……
我在 API 文档 上没有看到这个端点……它应该是 PUT 请求吗?需要带任何数据吗?
更新: 是的,是 PUT 请求,且不带数据——成功了!谢谢你 @JammyDodger!!