我的目标是skip records that already exist in the database but save new records
。
我有一个复合唯一密钥如下(在迁移中(:
add_index :table_name, [:feature1, :feature2], unique: true, name: 'idx_name'
我希望rails在检查唯一性时使用此索引。
在模型中,我尝试了以下方法:
records.each do |record|
unless record.persisted?
record.save!
end
end
但我仍然得到:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "idx_name"
我如何实现我的目标?
附言:我尝试了以下方法(对我来说是一种黑色魔法……很抱歉(:validates_uniqueness_of :idx_name, scope: [:my_table]
和on_duplicate_key_update :idx_name
(我认为这不能满足我的要求
谢谢!
您可以尝试Exceptions、Catch和Throw
records.each do |record|
begin
record.save!
rescue PG::UniqueViolation
next
end
end