0

我正在寻找一种创建递归工厂的舒适方法。在我的应用程序中,用户有很多软件,我想用 n 个相关软件“一次性”创建一个用户。这是我的代码:

FactoryGirl.define do
 factory :user do |f|
     f.sequence(:username) { |n| "user#{n}" }
 end

 trait :with_software do
    ignore do
         n 3
    end

 after :create do |user, evaluator|
     FactoryGirl.create_list :software, evaluator.n, :user => user
 end

而软件定义如下

 factory :software do |f|
     f.sequence(:name) { |n| "software#{n}" }
     f.association :user
 end

当我数字:

user1 = FactoryGirl.create(:user, :with_software)

FactoryGirls 创建一个具有 3 个相关软件条目的用户。问题是软件名称总是“software#{n}”。如何将唯一的软件名称指定为 :user.name + "software#{n}" ?

4

1 回答 1

0

首先,您所说的不是递归的,但这并不重要。

您可以通过以下方式实现您想要的:

 工厂:软件做|f|
     f.sequence(:name) { |n| “软件#{n}”}
     f.关联:用户

     特征:with_matching_name 做
       f.name { "#{f.user.name}#{f.name}" }
     结尾
 结尾

 工厂:用户做|f|
     f.sequence(:username) { |n| “用户#{n}”}

     特征:with_software 做
       忽略做
           n 3
       结尾
     结尾

     在 :create do |user, evaluator| 之后
        FactoryGirl.create_list :software, evaluator.n, :user => user, :with_matching_name
     结尾
  结尾

你可以试试,如果有效。

于 2013-11-04T10:36:53.670 回答