Opinion: ¿excepciones a nivel de action, o de aplicación?

Pido vuestra opinión. ¿Qué soleis hacer, capturar las excepciones a
nivel de cada action, o las capturais de forma global para toda la
aplicación?
Ventajas e inconvenientes?

Yo la ventaja que le veo a nivel global, es que así no se te olvida
ninguna, todas son capturadas y tratadas iguales.
Por contra, a nivel de action es mejor para poder realizar acciones
específicas dependiendo de qué exception ha ocurrido, o en qué action te
encuentres.

zxz wrote:

Pido vuestra opinión. ¿Qué soleis hacer, capturar las excepciones a
nivel de cada action, o las capturais de forma global para toda la
aplicación?
Ventajas e inconvenientes?

Yo la ventaja que le veo a nivel global, es que así no se te olvida
ninguna, todas son capturadas y tratadas iguales.
Por contra, a nivel de action es mejor para poder realizar acciones
específicas dependiendo de qué exception ha ocurrido, o en qué action te
encuentres.

Yo usaría las 2 formas a la vez, las excepciones en cada action para
controlar los errores concretos y reaccionar ante ellos. Y luego pondría
control a nivel genérico para todo aquello que se te escape o no quieras
controlar específicamente.

Luis V. wrote:

Y cómo se controlarían las excepciones a nivel general?

Puedes usar los around_filter…:

http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html#M000184

La idea es que hagas esto en el controlador de
app/controllers/aplication.rb:

around_filter :excepciones_generales

… # Tu código aquí, si es que tienes algo

private

def excepciones_generales
begin
yield
rescue
#Tu código aquí, podrías mostrar una plantilla genérica, u otra
cosa…
render :template => ‘plantilla_excepciones’
end
end

De todos modos no sé si existe algún método que se llame desde los
controladores de forma automática cuando se emite una excepción dentro
de una acción… habría que mirar

Y cómo se controlarían las excepciones a nivel general?

Parece que se puede hacer algo a nivel del controlador…

mira el método rescue_action_in_public

Algo que viene muy al caso:

On Jul 3, 2007, at 12:09 PM, Moises D. wrote:

Parece que se puede hacer algo a nivel del controlador…

http://api.rubyonrails.org/classes/ActionController/
Rescue.html#M000087

mira el método rescue_action_in_public

Esa es.

Si no requieres algo dinamico puedes editar simplemente el 500.html
que hay en public. En modo produccion sale eso para local_request?
falso. Poniendole estilo etc. es la forma mas sencilla de conseguir
un catchall con el aspecto de tu site.

De otro modo redefines rescue_action_in_public, por ejemplo asi envia
los mails Exception Notifier[*].

– fxn

[*] http://agilewebdevelopment.com/plugins/exception_notifier