我有以下工厂:
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
“Permission”和“Action”都是与api_license相关的工厂。例如:
FactoryGirl.define do
factory :action do
name "My Action"
api_license
end
end
问题在于权限和操作与不同的api_licenses相关联(正在创建其中两个)。
如何使它们与相同的api许可证相关?
答案 0 :(得分: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
有一个更简单的例子,它与你在Factory Girl GETTING STARTED文件中所做的不太接近: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#custom-construction