• Download Gist
add_collection_associations_to_factory_girl_factories.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
# Goal: Allow addition of instances to a collection in a factory-built object
# when those instances require references to the parent.
# Typically occurs in Rails when one model has_many instances of another
 
# See more at:
# http://stackoverflow.com/questions/2937326/populating-an-association-with-children-in-factory-girl
 
class Factory
def has_many(collection)
# after_build is where you add instances to the factory-built collection.
# Typically you'll want to Factory.build() these instances.
after_build { |instance|
yield instance
}
 
# after_create will be called after after_build if the build strategy is Factory.create()
after_create { |instance|
instance.send(collection).each { |i| i.save! }
}
end
end
 
# Usage
# Foo has_many :bar
 
Factory.define :foo do |f|
f.has_many :bar do |foo|
foo.bar << Factory.build(:bar, :foo => foo)
end
end

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.