2012-10-07 5 views
9

工場では、作成中のオブジェクトの他のフィールドの値をどのように参照するのですか?、field2の初期化時にfield1の値を参照する方法はありますか?

私のモデルウィジェットは二つのフィールド、私の工場内nicknamefullname

を持っていると仮定し、私は別のランダムなニックネームに工場が作成されるたびに作成偽物を使いたいです。 (最後に、シーケンス(:ニックネーム)を使用しなければならないことが分かりました。そうでなければ、名前はすべての工場で同じです)。

アサーションのテストを簡単にするために、ニックネームに基づいて、何かのようにfullname = "Full name for #{nickname}"

FactoryGirl.define do 
    factory :widget do 
    sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') } 
    sequence(:fullname) { |n| "Full name for " + ????? } 
    end 
end 

私はどこに???行く、私は#<FactoryGirl::Decl...ニックネームに設定されたものの代わりに取得します。

名前、名前、名前、値...何も動作していないようです。

答えて

12

はい。ここではファクトリー・ガールのGetting Started docからの例です:

factory :user do 
    first_name "Joe" 
    last_name "Blow" 
    email { "#{first_name}.#{last_name}@example.com".downcase } 
end 

FactoryGirl.create(:user, last_name: "Doe").email 
# => "[email protected]" 

また、私は通常config/application.rbで、別に私のシーケンスを定義:

FactoryGirl.define do 
    sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join } 
end 

あなたが同じことをやってから恩恵を受ける可能性があります。私は問題の私のサンプルコードで試してみました最初のものだったが、代わりに#{FIELD1}はフィールドの値が得られるの、それは

FactoryGirl.define do 
    factory :widget do 
    nickname generate(:name_faker) # assuming you had defined a :name_faker sequence 
    fullname generate("Full name for #{nickname}") 
    end 
end 
+0

:あなたはおそらくのような何かを行うことができますDecl ...シーケンスを使用する必要があるかもしれません。 – jpwynn

+0

さて、私はそれを逃した。更新された回答を確認してください。 –

+0

きちんとしたトリック、私はそれを試してみましょう感謝!! – jpwynn

関連する問題