Rails中import的on_duplicate_key_update不生效问题求助
解决Rails on_duplicate_key_update无法更新重复记录的问题
核心问题
你创建的是普通索引,而on_duplicate_key_update必须依赖**唯一索引(unique index)**才能识别重复记录并触发更新逻辑。普通索引仅用于加速查询,不会约束重复值插入,所以系统会持续新增重复记录。
修复步骤
将普通索引改为唯一索引
修改你的迁移文件,给索引加上unique: true约束:add_index :my_table, [:month, :media_id, :campaign_type], name: "index_table", unique: true运行迁移命令:
rails db:migrate。如果数据库中已有重复数据,迁移会失败,需要先清理掉重复记录再执行。确保字段类型与传入值匹配
检查数据库中month字段的类型是否和你传入的格式一致:- 如果
month是date类型,建议把字符串转为日期对象,避免格式解析差异导致唯一约束不生效:result = [{ media_id: 1, campaign_type: 1, month: Date.parse("2022/08/01"), report: { impression: 1000, cost: 5000 } }] - 若
report是JSON/JSONB类型,确保模型里正确声明字段类型:class MyTable < ApplicationRecord serialize :report, JSON # 或者在迁移中用 t.json :report 定义字段 end
- 如果
验证更新逻辑
保留原import代码即可,确认on_duplicate_key_update指定的字段存在且可更新:My_table.import result, on_duplicate_key_update: [:report]
内容的提问来源于stack exchange,提问作者YouYou
相关产品推荐
相关产品推荐

