Como puedo hacer varios rescues en una action

Hola como estan!

tengo una duda respecto al manejo de exceptions en rails .

en mi modelo User.rb , tengo un

before_destroy :dont_destroy_admin

def dont_destroy_admin
raise “No podemos eliminar al admin” if self.role == 1
end

y en mi UsersController:

def delete_user
begin
User.find(params[:id]).destroy
flash[:main_notice] = ‘user deleted’
redirect_to :action => ‘index’,:lang=>‘es’
rescue
flash[:main_notice] = ‘cant destroy admin’
redirect_to :action => ‘index’,:lang=>‘es’
end

end

pero si luego intento poner otro before_destroy, no me elimina nada, mi
idea
es hacr que el usuario no se pueda eliminar a el mismo
algo asi como un

before_destroy :dont_destroy_myself

def dont_destroy_myself
raise “No podemos eliminarte a ti mismo” if self.id ==
@current_user.id
end

pero con esto no puedo eliminar a ningun usuario, ni el admin, ni el
current
, ni ningun otro.
en mi controller luego hago dos rescues para tratar de detectarlos ,
pero
seguro que no es asi como se hace:

def delete_user
begin
User.find(params[:id]).destroy
flash[:main_notice] = ‘user deleted’
redirect_to :action => ‘index’,:lang=>‘es’
rescue
flash[:main_notice] = ‘cant destroy admin’
redirect_to :action => ‘index’,:lang=>‘es’
rescue
flash[:main_notice] = ‘cant destroy you’

redirect_to :action => 'index',:lang=>'es'

end

end

agradecería la ayuda de ustedes, muchas gracias de antemano

On Feb 8, 2008 5:20 AM, Miguel M. [email protected]
wrote:

        raise "No podemos eliminar al admin" if self.role == 1
   redirect_to :action => 'index',:lang=>'es'

algo asi como un
pero con esto no puedo eliminar a ningun usuario, ni el admin, ni el current
flash[:main_notice] = ‘cant destroy admin’

http://lists.simplelogica.net/mailman/listinfo/ror-es

Puedes capturar el mensaje que utilizas como excepción y utilizarlo en el
flash:

—user.rb—

before_destroy :dont_destroy_admin
before_destroy :dont_destroy_myself

def dont_destroy_admin
raise “No podemos eliminar al admin” if self.role == 1
end
def dont_destroy_myself
raise “No podemos eliminarte a ti mismo” if self.id ==
@current_user.id
end

—EOF—
—users_controller.rb—

def delete_user
User.find(params[:id]).destroy
flash[:main_notice] = ‘user deleted’
redirect_to :action => ‘index’,:lang=>‘es’
rescue => e
flash[:main_notice] = e
redirect_to :action => ‘index’,:lang=>‘es’
end
#…
—EOF—

Creo que con eso conseguirias lo que te propones.

Estais seguros de que esto funciona?

def dont_destroy_myself
raise “No podemos eliminarte a ti mismo” if self.id ==
@current_user.id
end

Un saludo,

Francesc

On Feb 8, 2008, at 9:25 AM, Daniel R. Troitiño wrote:

User.find(params[:id]).destroy
pero si luego intento poner otro before_destroy, no me elimina
end
begin
end

@current_user.id
flash[:main_notice] = e
redirect_to :action => ‘index’,:lang=>‘es’
end
#…
—EOF—

Creo que con eso conseguirias lo que te propones.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Not sent from my iPhone

Hola,

def dont_destroy_myself
raise “No podemos eliminarte a ti mismo” if self.id
http://self.id == @current_user.id
end

Este filtro siempre te va a dar un error. A no ser que hayas cambiado
como funcionan las cosas, la variable @current_user es una variable de
instancia que se crea en el controller. En un callback del modelo, no
puedes usar variables de instancia del controlador. Al pasar por
@current_user.id vas a tener una excepción

Este filtro debería ser un filtro de controller y preguntar en lugar de
por self.id por params[:id]. En ese caso sí debería funcionar, aunque en
ese caso no te sirve el manejo de excepciones en la acción ya que la
excepción la lanzarías antes de que se llamase a la acción. Deberías
poner el mensaje en la variable flash directamente.

saludos,

javier ramírez

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