Discourse Retort

是的,我可以做到。不过这算是个变通方案 :wink:

我不确定这个变通方案长期来看是否依然可行,而且也存在一定风险。例如,如果我直接运行那段代码,用户的 post_undo_action_window_mins 站点设置就会被永久修改。虽然你可以在迁移结束时将其改回来,但为了绕过守护机制而临时修改设置并不是理想的做法。

我理想中的方案是对 ReactionManager 接口进行微调,以便能够可靠地将“回击”(retorts)迁移为“反应”(reactions)。目前该接口仅设计用于处理来自客户端的请求。

实现这一目标的一种方法是:

  • toggle! 中的守护逻辑抽象为 ensure_can_toggle 方法
  • 使 ensure_can_toggle 方法支持 force 选项

这是 Discourse 其他部分处理迁移或后端导入时通常采用的方法(如果你在 app/lib/ 中搜索 force,就能看到一些示例)。

这样解释清楚吗?

2 个赞