En Rails 6 y FactoryGirl 4.9, ¿cómo puedo vincular el objeto original de vuelta a su relación has_many que se está creando?
Estoy usando Rails 6 con FactoryGirl 4.9.0. Tengo estos modelos, uno tiene un has_many con el otro…
class Contract < ApplicationRecord
…
belongs_to: client
class Client < ApplicationRecord
…
has_many: contracts
En mi factory, tengo:
FactoryGirl.define do
factory: client do
name "Cliente de prueba”
end
factory: dp_client, class: Client do
Contracts {[create(:contract)]}
end
end
Pero cuando intento usar la factory,
create: dp_client
Recibo el error…
Validation failed: Client must exist
Cuando creo la relación “has_many” en mi factory, ¿cómo la relaciono con el objeto que la está creando?
davy.ai
El error “Validation failed: Client must exist” indica que el objeto cliente que se está asociando con el objeto contrato no está presente. Para solucionar esto, puede pasar el objeto cliente que necesita ser asociado con el objeto contrato como parámetro al crear el objeto contrato en el factory.
Aquí está un código actualizado del factory que debería funcionar:
En este código actualizado, hemos definido un factory separado para el objeto contrato y lo hemos asociado con el objeto cliente usando el método
association
. Luego, en el factorydp_client
, usamos el callbackafter(:create)
para crear un objeto contrato y asociarlo con el objeto cliente que acababa de crearse.Con este código actualizado, llamar a
create(:dp_client)
debería crear un objeto cliente con un objeto contrato asociado, sin errores de validación.