Supongamos que tenemos la situación:¿Cómo agregar registros existentes a has_many sin guardarlos en la base de datos inmediatamente?
class Pirate < ActiveRecord::Base
has_many :parrots
validates_presence_of :name
end
class Parrot < ActiveRecord::Base
belongs_to :pirate
end
y tengo Piratas y loros con identificadores de 1 a 10. existente Ahora me gustaría hacer esto:
p = Pirate.first
p.name = nil
p.parrot_ids = [1,2,3]
p.save if p.valid?
Debido a que el pirata objeto no es válido (falta un nombre) No quiero que se guarde. Sin embargo, los loros están vinculados al pirata ahora y están comprometidos en la base de datos.
¿Cómo puedo asignar los loros, pero los enlaces a los loros solo se guardan en la base de datos cuando p.save tiene éxito? Es decir, ¿cómo puedo guardar el pirata y los enlaces a los loros en una transacción?
Hola Ken, quiero que los loros participen en la validación. Tengo una asignación masiva en: parrot_ids. Si la validación falla porque el usuario intentó hackear un loro al que no puede enlazar, entonces p.save debería fallar, después de lo cual p.parrots debería devolver los loros que el usuario intentó. –