Mmm.. ok. Entonces no entiendo el bloque:

    if @causa.nil?
      @recibo.valid?
      @recibo.errors.add( :movimientos, :debes_agregar_causa )
      ok = false
    end

Ese `@recibo.valid?` está al pedo, no? Y si no funciona el `errors.add` para
bloquear el `save` (supongo que no funciona, si no para qué agregaste esa cosa
del ok?) también está al pedo.. o llega el error a la vista?