Manejo de errores en los controler

como hago el manejo de errores si ocurren antes de llegar al

respond_to do |format|

gracias?

On Dec 16, 2007, at 4:19 AM, Angel Mauricio Pino Gonzalez wrote:

como hago el manejo de errores si ocurren antes de llegar al

respond_to do |format|

Con cuidado :-). Puedes detallar un poco mas?

– fxn

On Sun, Dec 16, 2007 at 12:19:35AM -0300, Angel Mauricio Pino Gonzalez
wrote:

como hago el manejo de errores si ocurren antes de llegar al

La gestión de errores se hace con begin/rescue. Un ejemplo
sería
def show
begin
@post = Post.find(params[:id])
rescue
render :action => ‘not_found’
return
end
end

Si se produce un error al hacer Post.find se lanzará el rescue. Es
posible reaccionar ante distintos errores especificando ante qué va a
reaccionar cada rescue.

def show
begin
@post = Post.find(params[:id])
rescue ActiveRecord::RecordNotFound
render :action => ‘not_found’
return
rescue
logger.info “Ha ocurrido algo realmente grave”
render :action => ‘500’
return
end
end

Con ese código reaccionamos ante la
excepciónActiveRecord::RecordNotFound mostrando una acción not_found y ante otras
registrando el error y renderizando otra página.

Es posible generalizar el comportamiento definiendo el método
rescue_action_in_public que puede definirse en ApplicationController o
en cualquier sitio que veas mejor.

http://api.rubyonrails.com/classes/ActionController/Rescue.html

Además, es posible usar otra sintáxis de rescue que puede servir para
otros casos. Muchas veces en un modelo te puede venir bien algo del tipo

a = (Post.find(pid)) rescue nil

Espero que esto te pueda servir, un saludo.

Otro resumen con comentarios y demás:

http://www.estadobeta.com/2007/05/06/activerecordrecordnotfound/

On 12/16/07, Pablo Martínez Schroder [email protected] wrote:

            end
    end

Suponiendo que queres mostrar una action “not_found” porque no se
encontro un registro lo de arriba va a generar una excepcion solo si
no existe params[:id] y trata de pasarle como parametro a find nil.

En caso de que haya un params y no lo encuentre @post va a ser nil y
eso no genera ningun tipo de excepcion.

Ademas tenes 3 lineas que no cambian el echo de especificarlas para
ese uso (begin, end y return)

On Sun, Dec 16, 2007 at 01:36:26PM -0300, Emilio T. wrote:

En caso de que haya un params y no lo encuentre @post va a ser nil y
eso no genera ningun tipo de excepcion.

Post.find(666) devuelve la excepción ActiveRecord::RecordNotFound si no
existe el registro con id 666, por eso el rescue para responder ante esa
excepción.

Ademas tenes 3 lineas que no cambian el echo de especificarlas para
ese uso (begin, end y return)

En eso te doy la razón, pero supongo que será cuestión personal :slight_smile:

Buenas,
y si estás usando la nueva versión de Rails, también puedes tratar las
excepciones de una manera más cómoda todavía:
http://blog.codefront.net/2007/12/10/declarative-exception-handling-in-your-controllers-rails-20-a-feature-a-day-2/

Saludos

Pablo Martínez Schroder
escribió:> On Sun, Dec 16, 2007 at 12:19:35AM -0300, Angel Mauricio Pino Gonzalez wrote:

  return
rescue ActiveRecord::RecordNotFound

registrando el error y renderizando otra página.
a = (Post.find(pid)) rescue nil

Espero que esto te pueda servir, un saludo.

Otro resumen con comentarios y demás:

http://www.estadobeta.com/2007/05/06/activerecordrecordnotfound/


/**

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs