2013-09-26 3 views
2

Я новичок в FactoryGirl.Не удалось выполнить проверку: код [Объект] уже принят

У меня много моделей FactoryGirl. Они связаны друг с другом.

Я объявил следующие модели, как показано ниже:

class Organization < ActiveRecord::Base 
    has_many :org_plan_years 
    has_many :subscribers 
end 

class Subscriber < ActiveRecord::Base 
    belongs_to :organization 
end 

class OrgPlanYear < ActiveRecord::Base 
    belongs_to :organization 
    has_many :coverages 
end 

class Coverage < ActiveRecord::Base 
    belongs_to :subscriber 
    belongs_to :org_plan_year 
    belongs_to :organization 
end 

И определить FactoryGirl:

заводы/organizations.rb

FactoryGirl.define do 
    factory :organization_benefit, class Organization do 
    name 'Benefit' 
    organization_code '2341' 
    end 
end 

заводы/subscribers.rb

FactoryGirl.define do 
    factory :subscriber_875450002, class: Subscriber do 
    association :organization, factory: :organization_benefit 
    ssn 875450002 
    end 
end 

заводы/org_plan_years.rb

FactoryGirl.define do 
    factory :org_plan_year_benefit, class: OrgPlanYear do 
    association :organization, factory: :organization_benefit 
    name 'First OPY' 
    end 
end 

заводы/coverages.rb

FactoryGirl.define do 
    factory :coverage_1, class: Coverage do 
    association :subscriber, factory: :subscriber_875450002 
    association :org_plan_year, factory: :org_plan_year_benefit 
    end 
end 

Образец теста:

it 'test' do 
    FactoryGirl.create(:coverage_1) 
end 

Когда я запускаю мой тест , Я получаю ошибку:

ActiveRecord::RecordInvalid: Validation failed: Organization code has already been taken 

Я думаю, проблема вызвана тем, что я организовал организацию несколько раз на заводах, но я не могу решить проблему.

+0

Действительно ли это полные определения ваших моделей? Сообщаемое вами сообщение об ошибке предполагает, что для них есть больше, например проверки. Кроме того, какова цель вашего завода ': coverage_1' с точки зрения уникальности организации, учитывая, что прямые и косвенные ассоциации приводят к созданию двух организаций? –

ответ

3

Сообщение об ошибке означает, что: organization_benefit factory должно создать новое пособие с уникальным значением system_code. Вы можете сделать это, используя последовательности FactoryGirl. Можете ли вы попробовать этот код?

FactoryGirl.define do 
    factory :organization_benefit, class Organization do 
    name 'Benefit' 
    sequence(:organization_code) {|n| 100 + n } 
    end 
end 
+0

Ты понял меня неправильно. Ваше решение всегда создает организацию с новым: organization_code. Например, я хочу создать 2 подписчика для одной организации. Первый абонент был создан хорошо, но в дальнейшем этого не делать, потому что организация с этими параметрами была создана раньше. – Nike0

+0

Чтобы создать 2 подписчика для одной организации, попробуйте этот код: org = create (: organization_benefit) подписчик1 = создать (: subscriber_875450002, организация: org) подписчик2 = создать (: subscriber_875450002, организация: org) –

Смежные вопросы