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

まず第一に、あなたが話していることは再帰的ではありませんが、それは重要ではありません。

次の方法で目的を達成できます。

 factory :software do |f|
     f.sequence(:name) { |n| "ソフトウェア#{n}" }
     f.協会:ユーザー

     特性 :with_matching_name do
       f.name { "#{f.user.name}#{f.name}" }
     終わり
 終わり

 factory :user do |f|
     f.sequence(:ユーザー名) { |n| "ユーザー#{n}" }

     特性 :with_software do
       無視する
           n 3
       終わり
     終わり

     :create do |ユーザー、評価者|の後
        FactoryGirl.create_list :software, evaluator.n, :user => user, :with_matching_name
     終わり
  終わり

機能する場合は、試すことができます。

于 2013-11-04T10:36:53.670 に答える