You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用paper_trail gem跟踪主键为UUID的模型时出现报错如何解决?

PaperTrail 跟踪UUID主键模型的解决方案

首先明确:PaperTrail完全支持跟踪主键为UUID的模型,你遇到的报错是配置和迁移操作顺序有误导致的。

报错原因

你先创建了默认的PaperTrail版本表,默认配置下versions表的item_id是整型,所以UUID主键会被强制转成整型存入,最终变成0。后续你直接把item_id列改成UUID类型时,表中已经存在的旧记录里item_id = 0不符合UUID格式,就触发了PostgreSQL的类型校验报错。

正确操作步骤

  • 如果你还没产生有效版本数据,直接删除旧的versions表,重新生成适配UUID的迁移文件即可:
    1. 生成PaperTrail迁移时指定item_id类型为uuid
    2. 执行迁移前在迁移文件中把t.bigint :item_id改成t.uuid :item_id
    3. 模型中开启PaperTrail时无需额外特殊配置,正常使用has_paper_trail即可
  • 如果你需要保留已有版本数据,操作顺序如下:
    1. 先给versions表新增一个临时uuid类型字段,把原有合法的item_id转成uuid存入,清理掉item_id=0的无效旧记录
    2. 删除原item_id字段,把临时字段重命名为item_id
    3. 新增配置PaperTrail.config.item_id_type = :uuid到PaperTrail初始化文件中

验证配置

修改完成后新增模型数据,查看versions表的item_id会正常存入对应UUID值,不会再出现类型转换错误。

内容的提问来源于stack exchange,提问作者wout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:30:01