创建 Topic 时遇到 external_id 问题

你好,

  1. 使用“external_id”字段创建了一个主题(通过 REST API)。
  2. 我删除了该主题,我假设该主题仍会保留在数据库中,但对用户隐藏。
  3. 我尝试使用相同的“external_id”创建相同的主题,但收到“External has already been taken”的错误。

如果主题从用户的角度被删除,那么用户应该能够使用相同的数据创建新主题,但为什么不行呢?似乎没有办法重新使用相同的“external_id”。这看起来像一个 bug。

2022/10/12 12:33:32 resp: &{Status:404 Not Found StatusCode:404 Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Content-Type:[application/json; charset=utf-8] Date:[Wed, 12 Oct 2022 10:33:32 GMT] Referrer-Policy:[strict-origin-when-cross-origin] Server:[nginx] Vary:[Accept-Encoding] X-Content-Type-Options:[nosniff] X-Discourse-Route:[topics/show_by_external_id] X-Discourse-Username:[mohan43u] X-Download-Options:[noopen] X-Frame-Options:[SAMEORIGIN] X-Permitted-Cross-Domain-Policies:[none] X-Request-Id:[26b86048-937c-451c-ac0c-b23dbcd3c8ca] X-Runtime:[0.013603] X-Xss-Protection:[0]] Body:0xc000183bc0 ContentLength:-1 TransferEncoding:[] Close:false Uncompressed:true Trailer:map[] Request:0xc00030a800 TLS:0xc0000d22c0}
2022/10/12 12:33:32 req: &{Method:GET URL:https://forums.tamillinuxcommunity.org/t/external_id/7N69MKNwQAs.json Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Api-Key:[] Api-Username:[mohan43u]] Body:<nil> GetBody:<nil> ContentLength:0 TransferEncoding:[] Close:false Host:forums.tamillinuxcommunity.org Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc0000260b8}
2022/10/12 12:33:32 {"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}
2022/10/12 12:33:32 uploading  https://www.youtube.com/watch?v=7N69MKNwQAs
2022/10/12 12:33:32 {"title":"[Youtube] ஆண்ட்ராய்டுக்கான கட்டற்ற மென்பொருள் | FOSS for Android | F-Droid | Tamil","raw":"https://www.youtube.com/watch?v=7N69MKNwQAs\nஇந்த காணொளியில் F-Droid எவ்வாறு பயன்படுத்துவது? அதன் பயன் என்ன ? - என்பதை காண்போம்.\n\nகாணொளி வழங்கியவர்: \nமணிமாறன், விழுப்புரம் கட்டற்ற மென்பொருள் குழுமம்\n\nF-Droid: http://fdroid.org/\n\n#fdroid #fossforandroid #tamil #android #vglug","category":3,"external_id":"7N69MKNwQAs"}

2022/10/12 12:33:33 failed to create Topic: https://www.youtube.com/watch?v=7N69MKNwQAs
2022/10/12 12:33:33 err: <nil>
2022/10/12 12:33:33 resp: &{Status:422 Unprocessable Entity StatusCode:422 Proto:HTTP/2.0 ProtoMajor:2 ProtoMinor:0 Header:map[Cache-Control:[no-cache, no-store] Content-Type:[application/json; charset=utf-8] Date:[Wed, 12 Oct 2022 10:33:33 GMT] Referrer-Policy:[strict-origin-when-cross-origin] Server:[nginx] X-Content-Type-Options:[nosniff] X-Discourse-Route:[posts/create] X-Discourse-Username:[mohan43u] X-Download-Options:[noopen] X-Frame-Options:[SAMEORIGIN] X-Permitted-Cross-Domain-Policies:[none] X-Request-Id:[217f7585-269a-48b3-ac5e-215e02e76bdb] X-Runtime:[0.060606] X-Xss-Protection:[0]] Body:{cs:0xc00032c180} ContentLength:-1 TransferEncoding:[] Close:false Uncompressed:false Trailer:map[] Request:0xc000352100 TLS:0xc0000d22c0}
2022/10/12 12:33:33 req: &{Method:POST URL:https://forums.tamillinuxcommunity.org/posts.json Proto:HTTP/1.1 ProtoMajor:1 ProtoMinor:1 Header:map[Api-Key:[] Api-Username:[mohan43u] Content-Type:[application/json]] Body:0xc0005b0228 GetBody:0x6b0e40 ContentLength:733 TransferEncoding:[] Close:false Host:forums.tamillinuxcommunity.org Form:map[] PostForm:map[] MultipartForm:<nil> Trailer:map[] RemoteAddr: RequestURI: TLS:<nil> Cancel:<nil> Response:<nil> ctx:0xc0000260b8}
2022/10/12 12:33:33 {"action":"create_post","errors":["Title has already been used","External has already been taken"]}

如果第一个主题被取消删除,会发生什么?

1 个赞

无法取消删除该主题,我没有看到任何图标/按钮可以取消删除。

你好 Mohan。 :wave:

我认为 @RGJ 所指的是:这不是一个 bug,因为 Discourse 默认使用“软删除”方法。external_id 将在此上下文中被使用,这是设计使然。 :+1:

2 个赞

未删除帖子的图标是这个:

在主题扳手菜单中也有此选项:

没有这样的东西

重点是这样的主题可以被取消删除,在这种情况下,将有两个具有相同外部 ID 的主题。externalID 应该在所有主题(包括已删除的主题)中都是唯一的。正如 @maiki 所说,这是设计使然。

1 个赞

可以取消删除?怎么做?我也想取消删除那个主题,这样我的问题就能解决了。但是没有办法取消删除那个主题。

要么 discourse 应该允许使用已删除主题上使用的 external_id,要么它应该有某种方法可以使用该 external_id 来取消删除已删除的主题。我在这两种情况中都看不到任何一种。

所以这显然是一个 bug。

我上面几楼的帖子清楚地表明,帖子是可以被恢复的。你似乎无法恢复这个特定的帖子,但这并不意味着这是一个bug,而是权限或设置的问题。

你是论坛的管理员吗?

顺便说一句,请停止将此标记为#bug。

1 个赞

我应该将其归类为错误吗?

不,你不应该。

请使用安全模式,看看是否可以执行此操作。如果不能,请详细告诉我们您看到的内容。屏幕截图将有所帮助。

请告诉我我是否尝试错了

2 个赞

“恢复”按钮位于“已删除”主题中。因此,您需要查看它并从那里恢复它。

您无法从用户删除帖子列表中访问相应的菜单。您必须转到主题本身才能在菜单中看到该选项:


@Mohan43u,这是否回答了您关于 external_id 用途的原始问题?:slight_smile:

是的,但 @Mohan43u 的观点是正确的,从“已删除帖子”列表中无法找到该选项。那么如何才能进入该主题呢?

另外,?status=deleted 似乎不再起作用了?

除了我的个人资料页面外,没有办法访问那个已删除的主题。它根本无法从类别中访问。

/latest?status=deleted 在我的测试站点上对我来说是有效的?


啊哈,我现在明白了。视频确实有帮助。:slight_smile: 是的,该主题标题目前不会显示在已删除主题的该视图中。这之前已经被提出过,但可能值得再看看。:+1:

您能否尝试 [YourSite]/latest?status=deleted 并查看是否可以从那里的主题列表中访问该主题?

现在我找到了另一个主题,还有一个技巧可以通过您的工作人员日志导航到已删除的主题,如果这对您有帮助的话:

1 个赞

完全干净的论坛,截至今天早上测试通过。当我取消删除主题时,它确实会再次出现在最新列表中。

好建议!!
但如果个人资料中的已删除帖子也允许导航到它,那就太好了。

1 个赞

我认为它被欢迎主题横幅的号召性用语 (CTA) 隐藏了。您能否尝试在控制台中隐藏它,看看主题是否在它后面?(或者编辑欢迎主题以关闭横幅 :slight_smile:

1 个赞

你说得对!

这同时既精彩(你的回应)又非常令人难过(原因)。

所以现在我们有两个理由将此重新归类为 UX ..

1 个赞

非常感谢,我已成功恢复该主题,我的 rest-api 客户端也运行正常。

3 个赞