Forum: Rails-ES Can only render or redirect once per action - redirect y render

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Valentin P. (Guest)
on 2009-04-06 15:48
(Received via mailing list)
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.
Albert C. (Guest)
on 2009-04-06 16:12
(Received via mailing list)
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>
javier ramirez (Guest)
on 2009-04-06 16:17
(Received via mailing list)
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
This topic is locked and can not be replied to.