如何避免Duplicate key value violates unique constraint
我假设id:1
已在使用中,但我需要强烈设置id
,
因为我在category
模型中有方法
def iconic
case self.id
when 1
smth
....
end
end
我的工厂
FactoryGirl.define do
factory :category do
sequence(:title) { |n| Faker::Hipster.word+"#{n}" }
position 1
text Faker::Lorem.sentence
image File.open(Rails.root.join('test', 'assets', 'images', 'banners', (1..6).to_a.sample.to_s+'.png'))
end
end
Failure/Error: c1 = create(:category, id: 1)
ActiveRecord::RecordNotUnique:
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "categories_pkey"
DETAIL: Key (id)=(1) already exists.
答案 0 :(得分:1)
是的问题是您尝试创建具有相同id
属性值的多个记录,这是不允许的。它应该永远是唯一的。
实际问题我认为你的模型代码依赖于对象的id
。
def iconic
case self.id
when 1
smth
....
end
end
基于id
属性编写逻辑不是一个好习惯,因为每次填充数据库时都无法确保将相同的ID分配给同一个对象。相反,您应该使用其他一些独特的属性,例如slug
,email
,username
,适合您的模型。所以,你应该修改你的模型逻辑:
def iconic
case self.slug_or_any_other_unique_field
when 'expected_value_of_above_field'
smth
....
end
end