2016-04-21 55 views
1

我想創建一個:membership工廠,然後創建:comment工廠,在此特定情況下,該工廠「彙總」到成員身份所在的同一組。它不應該總是指向同一個集團,所以我定義我的工廠是這樣的:定義鏈接關聯的工廠

factory :membership do 
    user 
    group 
end 

factory :decision do 
    group 
end 

factory :comment do 
    decision 
end 

然後我創建這兩個對象是這樣的:

membership = create(:membership) 
decision = create(:decision, group: membership.group) 
comment = create(:comment, decision: decision) 

這工作,但這只是一個很小的例子。我希望能夠創建成員資格,然後將成員資格作爲參數傳遞給Comment構造函數,從而使第二行不必要。我查看了一下factory_girl文檔,我無法弄清楚如何改變我的工廠定義來做到這一點。有沒有辦法?

回答

1

將會員資格傳入transient attribute的評論工廠。在before(:create)回調中,根據成員資格創建決策,並將決定添加到評論中:

factory :comment do 
    transient do 
    membership 
    end 

    before(:create) do |comment, evaluator| 
    decision = create(:decision, group: evaluator.membership.group) 
    comment.decision = decision 
    end 

end