与Factory Girl上的相同型号相关联

时间:2013-12-12 17:03:04

标签: ruby-on-rails-3 rspec factory-bot

我有以下工厂:

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许可证相关?

1 个答案:

答案 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