2016-07-25 6 views
7

FactoryGirl工場でtransient doの目的は何ですか?FactoryGirlファクトリの `transient do`ブロックの目的は何ですか?

私は、以下のようなものから始まる多くの工場を見ました。

factory :car do 
    owner nil 
    other_attribute nil 
end 
... 

は、私がこのブログでいくつかの情報を見つけた:http://blog.thefrontiergroup.com.au/2014/12/using-factorygirl-easily-create-complex-data-sets-rails/

しかし、私はまだ完全にこれを行う方法と理由を理解していません。 FactoryGirlでの私の経験は最小限です。

FactoryGirlを使用して経験を積んだ人なら誰でも洞察力を共有できますか?

+2

あなたの例では 'transient'は使用していません。理解したいと思う '一時的なもの 'を使う工場がありますか? –

答えて

20

transient属性を使用すると、はモデルの属性ではないデータを渡すことができます。

  • purchase_price
  • モデル

あなたが作成したとき、車の名前を大文字にしたい:

を使用すると、次の属性を持つというモデル carを持っていると言います工場の車のモデル。私たちにできることは次のとおりです。したがって

factory :car do 
    transient do 
    # capitalize is not an attribute of the car 
    capitalize false 
    end 

    name   { "Jacky" } 
    purchase_price { 1000 } 
    model   { "Honda" } 

    after(:create) do |car, evaluator| 
    car.name.upcase! if evaluator.capitalize 
    end 
end 

、あなたは自動車工場を作成し、名前を大文字にしたいとき。することができます

car = FactoryGirl.create(:car, capitalize: true) 
car.name 
# => "JACKY" 

希望に役立ちます。

関連する問題