2016-05-09 3 views
2

У меня есть атрибут, делегированный связанному объекту (AR/Postgres), и я пытаюсь переопределить его при вызове фабрики.Как переопределить делегированный атрибут в factory_girl?

class Patient 
    delegate :email, to: :credential 
    has_one :credential, as: :owner, dependent: :destroy 
end 

class Credential 
    belongs_to :owner, polymorphic: true 
end 

FactoryGirl.define do 
    factory :patient do 
    first_name 'Jane' 
    last_name 'Patient' 
    dob Date.parse('2005-01-11') 
    gender 'Female' 
    zipcode '80202' 

    after(:build) do |user| 
     create(:credential, owner: user) 
    end 
    end 
end 

FactoryGirl.define do 
    factory :credential do 
    password '!Secret15' 
    password_confirmation { password } 
    agree_to_terms true 

    sequence :email do |n| 
    "user#{n}@bar.com" 
    end 
    end 
end 

И призыв:

create(:patient, email: '[email protected]') 

Он просто не работает, а атрибут становится устанавливается последовательность по умолчанию.

Выложил свои документы и Google и не смог найти ответ. Любая помощь приветствуется.

ответ

0

factory_girl ничего не делает с delegate. Вам необходимо передать email на завод :credential. Атрибуты не доступны в функции обратного вызова, так что получить email от оценщика, который является вторым аргументом блока обратного вызова:

FactoryGirl.define do 
    factory :patient do 
    # other attributes 

    after(:build) do |user, evaluator| 
     create(:credential, owner: user, email: evaluator.email) 
    end 
    end 
end 

Документально здесь: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#transient-attributes

+0

Awesome, спасибо – idknox

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