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

Rails7+Filepond多文件上传触发PG唯一约束冲突求助

Rails 7中Active Storage搭配Filepond批量上传触发PG::UniqueViolation错误

问题现象

  • 在Rails 7环境下,使用Active Storage结合Filepond提交2张及以上图片时,持续触发PG唯一约束冲突错误
  • 该问题仅在使用Filepond、Uppy等第三方JS上传库批量上传时出现,原生Active Storage功能正常
  • 已尝试删除并重建数据库,未解决主键相关问题

当前配置情况

  • 基于Filepond演示仓库改造,已完成以下多文件上传配置:
    • 表单字段添加multiple: true
    • 控制器参数允许images: []
    • JS配置中设置allowMultiple: true

错误详情

提交时出现重复的signed_id(参数中前5个ID与后5个重复),触发如下错误:

PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_active_storage_attachments_uniqueness"
DETAIL: Key (record_type, record_id, name, blob_id)=(Project, 5, images, 40) already exists.

提交的参数示例:

{"authenticity_token"=>"[FILTERED]",
 "project"=>
  {"name"=>"bab",
   "images"=>
    ["",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f8f1c9e5f89f31780bef2c8f8f0b149dd635573e",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--38e63fff54e2887d283e95dc71ac5384d9af173f",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBNQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--4c7a4cf2646b3cb1cf4a76466b75a6293ec7462f",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f9b7602bd59038c74c7b6a741f1d13defd4bd647",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBNUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--0a922651723e7f16b4a4039b4532d27a8cd36a48",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f8f1c9e5f89f31780bef2c8f8f0b149dd635573e",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMZz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--38e63fff54e2887d283e95dc71ac5384d9af173f",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBMdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f9b7602bd59038c74c7b6a741f1d13defd4bd647",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBNQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--4c7a4cf2646b3cb1cf4a76466b75a6293ec7462f",
     "eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBNUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--0a922651723e7f16b4a4039b4532d27a8cd36a48"]},
 "commit"=>"Create Project"}

相关JS代码

import { DirectUpload } from '@rails/activestorage'
import * as FilePond from 'filepond'

// Get the input element
const input = document.querySelector('.filepond')
const directUploadUrl = input.dataset.directUploadUrl

// Initialize FilePond
FilePond.create(input)

// Set FilePond settings
FilePond.setOptions({
allowMultiple: true,
  server: {
    process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {
      const uploader = new DirectUpload(file, directUploadUrl, {
        directUploadWillStoreFileWithXHR: (request) => {
          request.upload.addEventListener(
            'progress',
            event => progress(event.lengthComputable, event.loaded, event.total)
          )
        }
      })
      uploader.create((errorResponse, blob) => {
        if (errorResponse) {
          error(`Something went wrong: ${errorResponse}`)
        } else {
          const hiddenField = document.createElement('input')
          hiddenField.setAttribute('type', 'hidden')
          hiddenField.setAttribute('value', blob.signed_id)
          hiddenField.name = input.name
          document.querySelector('form').appendChild(hiddenField)
          load(blob.signed_id)
        }
      })

      return {
        abort: () => abort()
      }
    },
    fetch: {
      url: './filepond/fetch',
      method: 'POST'
    },
    revert: {
      url: './filepond/remove'
    },
    headers: {
      'X-CSRF-Token': document.head.querySelector("[name='csrf-token']").content
    }
  }
})

求助需求

寻求解决批量上传时重复signed_id导致唯一约束冲突的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:32:07