Can only render or redirect once per action - redirect y render


#1

Buenas tardes.

Hoy es un día de esos en lo que no ves una solución o tienes pocas
luces.
Tengo lo siguiente:

Controlador ubicaciones

def show
@ubicacion = Ubicacion.find(params[:id], :include => :equipos)

case @ubicacion.dp
when "Prueba Nombre":
  check_level("Prueba")
end

 respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @ubicacion }
end

end

Controlador application

def check_level(cadena)
if authorized?
current_usuario.roles.each { |nivel| return true if nivel.nombre

cadena }
end

 erase_render_results
 flash[:notice] = "Usuario no autorizado"
 redirect_to root_path

end

28 def busqueda_ldap_replica(euid)

La cuestión es que sale (como es lógico) el error que pongo en el
asunto.
Leyendo por ahí encuentro que poniendo un return (solo lo he visto en
los
renders) funiona correctamente, en este caso en la función check_level.
Quitando el bloque repond_to funciona, pero quiero saber si proponeis
algo
sin tener que quitar el respond_to, por si lo necesito en un futuro. Lo
que
quiero es limitar el acceso a determinados datos de la base de datos.

Saludos.


#2

Puedes poner el return justo despues de la llamada a check_level… pero
no
me parece muy bonito.

Sino, lo que puedes hacer es algo asi:

def show
@ubicacion = Ubicacion.find(params[:id], :include => :equipos)

 respond_to do |format|
  case @ubicacion.dp
  when "Prueba Nombre":
    check_level("Prueba")
  else
    format.html # show.html.erb
    format.xml  { render :xml => @ubicacion }
  end
end

end

2009/4/6 Valentin P. removed_email_address@domain.invalid


#3

Hola,

yo haría que “check_level” fuera lo que se supone que es, un método que
devuelve true/false y no hace nada más. En ese caso, desde show
llamarías a check_level, y si es false ya tomas la acción que sea, un
redirect o lo que te interese.

tal cual lo tienes ahora, en el caso de que check_level no devuelva
true, intentas un redirect en ese método y luego un render en show, de
ahí el error.

saludos,


javier ramírez

…i do ruby on rails development in madrid, spain, at
http://www.aspgems.com
…you can find out more about me on http://formatinternet.wordpress.com
and http://workingwithrails.com/person/5987-javier-ramirez