Rails: ¿Cómo usar before_save para cambiar un valor de campo basado en otro campo?
Estoy tratando de establecer un campo booleano en falso basado en el valor de otro campo booleano. Intenté lo siguiente con un modelo ActiveRecord:
before_save :reconcile_xvent
def reconcile_xvent
self.xvent_hood = false if !self.xvent_plenum?
end
Pero esto no funciona. Ahora, muchas de mis pruebas de unidad fallan con:
ActiveRecord::RecordNotSaved: ActiveRecord::RecordNotSaved
¿Cómo puedo configurar xvent_hood para que sea falso si xvent_plenum es falso?
Actualizar
Esto es lo que funciona (algunos de los cuales provienen de los comentarios / respuestas a continuación):
before_validation :reconcile_xvent
def reconcile_xvent
if self.xvent_hood?
self.xvent_hood = false unless xvent_plenum?
end
end
No podría imaginarme hacer que funcione sin el "if self.xvent_hood?" parte....