2012-04-10 52 views
5

Ok, así que tengo este método de una aplicación con la que estoy trabajando y funciona en producción. Mi pregunta, ¿por qué funciona esto? ¿Es esta nueva sintaxis de Ruby?¿Por qué funciona esta sintaxis de rescate?

def edit 
    load_elements(current_user) unless current_user.role?(:admin) 

    respond_to do |format| 
    format.json { render :json => @user } 
    format.xml { render :xml => @user } 
    format.html 
    end 

rescue ActiveRecord::RecordNotFound 
    respond_to_not_found(:json, :xml, :html) 
end 
+1

Véase también http://stackoverflow.com/questions/1542672/how-does- one-use-rescue-in-rails-without-the-begin-and-end-block –

Respuesta

13

rescue s no tienen que estar atado a una explícita begin cuando están en un método, así es como se define la sintaxis. Por ejemplo, vea #19 here y this SO question, así como the dupe above.

+0

Gracias ... Buen enlace. – Vik

0

rescue palabra es parte de la definición del método

Pero en los controladores mejor para rescatar a los errores con rescue_from

-2

probar este

def edit 
    begin 
    load_elements(current_user) unless current_user.role?(:admin) 

    respond_to do |format| 
     format.json { render :json => @user } 
     format.xml { render :xml => @user } 
     format.html 
    end 

    rescue ActiveRecord::RecordNotFound 
    respond_to_not_found(:json, :xml, :html) 
    end 
end 
+0

Sé que funcionará ... mi pregunta es por qué funciona mi sintaxis – Trace

+0

Es perfectamente legal usar un 'rescate' dentro una definición de método (y 'begin' implícito) sin un' begin' explícito. –

2

rescate puede trabajar solo. no hay necesidad de comenzar y terminar siempre.

Se puede utilizar de rescate en su forma única línea para devolver un valor, cuando otras cosas en la línea van mal:

h = { :age => 10 } 
h[:name].downcase       # ERROR 
h[:name].downcase rescue "No name" 
+0

Esto lo usa como un modificador de declaración, sin embargo, que no es la pregunta del OP. Estás en lo correcto, por supuesto, pero no responde directamente la pregunta. –

Cuestiones relacionadas