2013-08-26 2 views
0

사용자, 제품 및 소유권의 세 가지 모델이 있습니다. 소유권은 사용자 및 제품에 속합니다. 제품 및 사용자는 많은 소유권을 보유합니다. 관련 모델의 공장 개선

은 내가 FactoryGirl 보석 다음과 같은 공장 생성 :

factory :user do 
    sequence(:name) { |n| "Robot #{n}" } 
    sequence(:email) { |n| "numero#{n}@robots.com"} 
    association :location, factory: :location 
end 

factory :product do 
    sequence(:name) { |n| "Objet #{n}" } 
    association :location, factory: :location 
end 

factory :ownership do 
    association :user, factory: :user 
    association :product, factory: :product 
end 

을 그리고 난 그런 식으로 그것을 사용 :

let(:user) { FactoryGirl.create(:user) } 
let(:product) { FactoryGirl.create(:product) } 
let(:ownership) { FactoryGirl.create(:current_ownership, user: user, product: product) } 

하지만, 내 공장을 향상이 작업을 수행하기 위해 할 :

let(:user) { FactoryGirl.create(:user) } 
let(:product) { FactoryGirl.create(:product, owner: user) } 

ide 그걸하는 법? 당신이 소유자가에 속성을 전달할 수 있다는 것을, 당신이 그렇게 공장을 구성

FactoryGirl.define do 
    factory :product do 
    # ... 

    ignore do 
     owner nil 
    end 

    after :create do |product, ev| 
     if ev.owner 
     create :ownership, user: ev.owner, product: product 
     end 
    end 
    end 
end 

이 방법 :

답변

0

당신이 사용하는 공장 소녀 after_create 콜백을 할 수 있습니다. ignore 블록은이 속성이 객체의 생성자에 전달되지 않도록 보장하지만 factory 소녀 콜백에서 사용할 수 있습니다.

공장 소녀 콜백 here에 대한 자세한 정보를 찾을 수 있습니다.

+0

감사합니다. 이것은'before : create' 또는'after : create'입니까? 그리고'ev'는 무엇입니까? –

+0

그래, 내 실수는, 당신의 경우에는'after : create'이어야합니다. 나는 대답에서 그것을 바로 잡았다. 그리고 ev (콜백의 두 번째 인수)는 팩토리 소녀가 콜백에 전달하는 평가자 객체입니다. 무시 된 속성에 대한 액세스 권한을 제공합니다. – jurglic

관련 문제