16

ファクトリ内で、作成中のオブジェクトの他のフィールドの値を参照するにはどうすればよいですか?

モデル ウィジェットに 2 つのフィールドがnicknameあり、fullname

工場内では、Faker を使用して、工場が作成されるたびに異なるランダムなニックネームを作成したいと考えています。(最終的に、sequence(:nickname) を使用する必要があることがわかりました。それ以外の場合、名前はすべてのファクトリで同じです。)

いくつかのアサーションをテストしやすくするために、ニックネームに基づいたフルネームを生成したいと思います。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...ニックネームが設定されていたものの代わりに取得します。

name、name.to_s、name.value を試しました...何も機能していないようです。

4

1 に答える 1

20

はい。Factory Girl の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
# => "joe.doe@example.com"

また、通常、次のようにシーケンスを個別に定義しますconfig/application.rb

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

あなたは同じことをすることで利益を得るかもしれません。次に、おそらく次のようなことができます。

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
于 2012-10-07T01:35:12.787 に答える