I want to pass a parameter into a factory that will be used to set the attribute on an associated model. The associated model is created within the factory.
I have a Transaction model with a many-to-many link to itself through a join table TxLink.
I want to call link = FactoryGirl.create(:link_red_to_sub, sub: 10, red: 7) which will create two Transaction objects and a TxLink that links the two.
I get an error in the association line below because of the units: sub at the end. The error is “trait not defined”. I tried units: { sub } (with brackets) instead but no dice.
factory :tx_link do
units "9.99"
factory :link_red_to_sub do
ignore do
sub 0
red 0
end
units { red }
association :giver, factory: :transaction, units: sub
association :taker, factory: :redemption, units: red
end
end
The
associationhelper in factory_girl can’t take dynamic property arguments, but you can use a dynamic attribute to instantiate the association however you want:The only downside of this is that the
giverandtakerassociations will use the create strategy regardless of what strategy you’re buildingtx_linkwith, which essentially means thatattributes_forandbuild_stubbedwon’t work correctly for thetx_linkfactory.The example I provided requires version 4.5.0.