2016-05-14 3 views
0

私は工場の女の子に新しいです。メンバーシップとステークの両方のファクトリに属する​​Shareファクトリを作成したい(両方とも同じGroupインスタンスとの関連付けを行うようにしたい)。私は共有を作成するコールバックを避けるために関連メソッドを使用するのではなく、次のように共有ファクトリを記述しようとしています。before(:create)コールバックで一時的な属性を使用

factory :share do 
    transient do 
    same_group 
    end 

    before(:create) do |share, evaluator| 
    stake = create(:shareless_stake, group: evaluator.same_group) 
    member = create(:shareless_membership, group: evaluator.same_group) 
    share.stake = stake 
    share.membership = member 
    end 
end 

は、その後、私はこのように共有を作成したい:

share = create(:share, same_group: create(:group)) 

私は「same_group」形質が登録されていないというエラーを取得しています。私が特性を作成したり、その名前でグループファクトリの下にファクトリを作成したりすると、ビルドされたShareのインスタンスのための 'group =' setterメソッドがないというエラーが発生します。

factory_girlが一時的な属性を共有の実際の属性として扱おうとしているように見えますが、混乱しています。私は、same_groupを、before(:create)ブロックに渡すことができるGroupインスタンスの変数にしたいだけです。私は間違って何をしていますか?

答えて

2

same_groupをデフォルト値なしで定義すると、Factory Girlは属性ではなく関連として扱います(同じ名前のファクトリを検索しようとします)。この行をたとえばに変更します。 same_group nilはその問題を解決します。ファクトリーガールは、引数やブロックの数に応じて、同じメソッドを属性または関連付けのいずれかとして扱うことができることは間違いありません。

関連する問題