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....

Respuestas a la pregunta(2)

Su respuesta a la pregunta