Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save softcraft-development/436917 to your computer and use it in GitHub Desktop.
Save softcraft-development/436917 to your computer and use it in GitHub Desktop.
# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment