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

Rails Active Storage添加附件出现重复计数异常问题排查

问题原因分析

  • 重复关联未去重:attach方法默认不会校验传入的Blob是否已经和当前message关联,只要传入signed_id就会新增一条ActiveStorage::Attachment记录。如果attachment_params[:new]中包含已经在第一步清理后保留的旧附件的signed_id,或者数组内部有重复的signed_id,都会导致新增超出预期的关联,计数增加。
  • 关联缓存异常:虽然你调用了reload刷新对象,但Rails的关联缓存可能存在未完全失效的情况,你可以在执行attach操作前调用message.attachments.reset主动清除关联缓存,避免读取到旧的关联数据。
  • 参数ID类型不匹配:如果remaining_attachment_ids的类型为字符串,而ActiveStorage::Attachment的主键是整数,部分数据库的隐式转换可能导致where.not条件匹配错误,第一步打印的计数可能因为事务内查询缓存显示正确,实际仍有残留的附件记录,新增后总计数偏高。
  • 异步清理逻辑冲突:如果你修改过Active Storage的默认配置,将purge操作改为异步执行(比如默认调用purge_later),那么删除操作会进入后台队列,执行attach时删除操作还未完成,就会出现计数异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:03