2016-08-18 46 views
-1

期间唯一约束如何避免Duplicate key value violates unique constraint重复键值违反rspec的

我认为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

什么是实际使用情况? – max

回答

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 
相关问题