2013-12-12 102 views
0

我有以下工廠:關聯與工廠女孩同型號

FactoryGirl.define do 
    sequence :api_name do |n| 
    "API_License_Name_#{n}" 
    end 

    factory :api_license do 
    name { FactoryGirl.generate(:api_name) } 
    description "Desc" 
    end 
end 

但在兩個特定的工廠我有以下幾點:

FactoryGirl.define do 
    factory :scope_permission do 
     permission 
     action 
    end 
end 

「權限」和「行動」都是工廠這兩者都與api_license有關。例如:

FactoryGirl.define do 
    factory :action do 
    name "My Action" 
    api_license 
    end 
end 

問題是權限和操作正在鏈接到不同的api_licenses(其中兩個正在創建)。

我該怎麼做才能使它們與相同的api許可證相關?

回答

0

我想你會想要通過使用回調或自定義構造函數來處理這種情況。

通過回調,您將在工廠完成後創建第二個關聯,這將使您可以訪問第一個關聯模型的參數。

這裏的文檔: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#callbacks

通過自定義構造函數(可能是在這種情況下必要的),你可以使用一個ignore do塊,並創建了您已建立對象的關聯。這將是這個樣子:

ignore do 
    api_license create(:api_license) 
    permission create(:permission, api_license: api_license) 
    action create(:action, api_license: api_license) 
end 



initialize_with do 
    new(permission: permission, action: action) 
end 

有一個簡單的例子,這不是很接近,你需要在工廠女孩做什麼準備工作文件: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#custom-construction

+0

我不很瞭解。我每個工廠都有一個文件。代碼應該放在哪裏? – Tony

+0

對不起,我沒有顯示包裝這部分的代碼。我的代碼片段進入工廠:scope_permission do/end block,它是工廠的內容。 – geoffharcourt

+0

我得到以下錯誤:definition_proxy.rb:35:在'add_attribute'中:錯誤的參數數量(3爲2)(ArgumentError) – Tony