导入投票:是否可以使用 PostgreSQL 命令或其他方式在特定主题上设置投票数?

您好,我正在从 AnswerHub 迁移到 Discourse。但是,由于我无法访问 AnswerHub 数据库,因此我抓取了整个网站来收集 Ideas 及其各自的投票数。

如何在 Discourse 中覆盖特定问题的投票数?例如,问题“用橙子制作新食谱”在我的 AnswerHub 上有 42 票。我已经导入了该问题,但我希望将其投票数设置为 42,而不是默认的 0。这样,用户就可以看到每个问题的准确投票数。

是否有办法执行 PostgreSQL 命令来手动设置投票数?
我需要创建 100 多个虚假用户来模拟每个问题的投票数吗?我希望不是这样,因为那不是一个理想的解决方案 :stuck_out_tongue:

提前感谢您的帮助。

:slight_smile:

1 个赞

你好 Luicid!

:warning: 我不是专家,也从未使用过这个插件 :upside_down_face:

这是一个很好的问题,恐怕我无法给出确切的答案,但也许我可以提供一些建议,因为你似乎对编码有所了解(既然你要从头开始迁移)。

投票插件使用 2 个表:

discourse_voting_topic_vote_count

字段名 类型 约束
id 序列 主键
topic_id 整型 外键(引用 topics),可为空
votes_count 整型 可为空
created_at 时间戳
updated_at 时间戳

discourse_voting_votes

字段名 类型 约束
id 序列 主键
topic_id 整型 外键(引用 topics),可为空
user_id 整型 外键(引用 users),可为空
archive 布尔型 可为空,默认为 false
created_at 时间戳
updated_at 时间戳

你可能也对插件的设置感兴趣,但我猜你已经知道了 :slight_smile:

最后,主题投票必须在每个类别中启用,所以我会在导入脚本中创建类别时启用它们。

至于如何正确地在迁移过程中填充主题中的投票,我不是专家,但我想我会为每次投票使用随机的、唯一的用户,因为有一个作业可以防止同一用户多次投票,并且会删除重复的投票:
https://github.com/discourse/discourse-topic-voting/blob/main/app/jobs/onceoff/voting_ensure_consistency.rb#L28

我将填充必要的字段(待定),并让作业填充其他字段(如果存在的话)。

你可能还想看看所有的插件作业 discourse-topic-voting/app/jobs at main · discourse/discourse-topic-voting · GitHub

希望这能帮到你,也希望你能分享一下进展 :slight_smile:

1 个赞

太棒了,感谢您这篇很棒且有帮助的帖子!:slight_smile:
我决定采用另一种方法:

在我原来的网站上,我能够检索出谁为哪个投票的数据,所以我将这些信息存储在数据库中。之后,我使用带有 requests 库的 Python 脚本,为他们已经投票过的想法,从他们迁移的账户进行投票,然后就搞定了!

再次感谢您

1 个赞