是的,我可以做到。不过这算是个变通方案 ![]()
我不确定这个变通方案长期来看是否依然可行,而且也存在一定风险。例如,如果我直接运行那段代码,用户的 post_undo_action_window_mins 站点设置就会被永久修改。虽然你可以在迁移结束时将其改回来,但为了绕过守护机制而临时修改设置并不是理想的做法。
我理想中的方案是对 ReactionManager 接口进行微调,以便能够可靠地将“回击”(retorts)迁移为“反应”(reactions)。目前该接口仅设计用于处理来自客户端的请求。
实现这一目标的一种方法是:
- 将
toggle!中的守护逻辑抽象为ensure_can_toggle方法 - 使
ensure_can_toggle方法支持force选项
这是 Discourse 其他部分处理迁移或后端导入时通常采用的方法(如果你在 app/ 或 lib/ 中搜索 force,就能看到一些示例)。
这样解释清楚吗?