工厂女孩的递归阶乘

时间:2013-10-31 21:16:49

标签: ruby-on-rails rubygems ruby-on-rails-4 factory-bot

我正在寻找一种舒适的方式来创建一个复兴的工厂。 在我的应用程序中,用户拥有许多软件,我想用“一次性”创建一个具有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个相关软件条目的用户。问题是软件名称总是“软件#{n}”。 如何指定唯一的软件名称:user.name +“software#{n}”?

1 个答案:

答案 0 :(得分:0)

首先,你所谈论的不是递归,但这并不重要。

您可以通过以下方式实现您的目标:


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

     trait :with_matching_name do
       f.name { "#{f.user.name}#{f.name}" }
     end
 end

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

     trait :with_software do
       ignore do
           n 3
       end
     end

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

如果有效,你可以试试。