2013-12-12 166 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