Tengo dos modelos (ModelA y ModelB) y fábricas FactoryGirl para cada uno. Quiero que la fábrica de ModelB pueda (A) crear datos de prueba, y (B) construir (sin guardar en la base de datos) datos de muestra para mostrar a los clientes. Tengo problemas para que (A) funcione debido a las validaciones de Rails en mis modelos.Anular validación de rieles al crear objetos FactoryGirl
ModelA:
class ModelA < ActiveRecord::Base
belongs_to :model_b
validates_presence_of :model_b
end
fábrica para ModelA:
FactoryGirl.define do
factory :model_a do
some_attr "hello"
model_b { FactoryGirl.build :model_b }
end
end
ModelB
class ModelB < ActiveRecord::Base
has_one :model_a
end
fábrica para ModelB
FactoryGirl.define do
factory :model_b do
some_attr "goodbye"
end
end
No puedo crear objetos a partir de estas fábricas sin obtener errores de validación:
ruby> FactoryGirl.create :model_a
ActiveRecord::RecordInvalid: Validation failed: ModelB can't be blank
Parece que factorygirl está tratando de salvar el objeto de fábrica antes de guardar sus Asociaciones del. Me doy cuenta de que podría hacer que la fábrica para ModelB cree su ModelA asociado (en lugar de compilarlo); sin embargo, perdería la flexibilidad de poder utilizar la fábrica de ModelA para crear datos de muestra o guardar datos de prueba. Alternativamente, podría eliminar las validaciones; pero entonces no tendría validaciones.
¿Alguna otra opción?
Gran solución. Me ayudo mucho. –
El proxy personalizado ya no funciona para su información. default_strategy se eliminó aquí: https://github.com/thoughtbot/factory_girl/commit/76235313240c17db663fe7f2868d7f0ecdea72d8#diff-2856f806bf47808e13bc8dc0baf374db – Geesu
O ver: https://github.com/thoughtbot/factory_girl/issues/578 –