skip_create, to_create, and initialize_with

The skip_create, to_create, and initialize_with methods control how factory_bot interacts with the build strategies.

These methods can be called within a factory definition block, to scope their effects to just that factory; or within FactoryBot.define, to affect global change.


The initialize_with method takes a block and returns an instance of the factory's class. It has access to the attributes method, which is a hash of all the fields and values for the object.

The default definition is:

initialize_with { new }


The to_create method lets you control the FactoryBot.create strategy. This method takes a block which takes the object as constructed by initialize_with, and the factory_bot context. The context has additional data from any transient blocks.

The default definition is:

to_create { |obj, context|! }

The skip_create method is a shorthand for turning to_create into a no-op. This allows you to use the create strategy as a synonym for build, except you additionally get any create hooks.