2009-03-30 11 views
12

Tengo una aplicación de rieles que permite a un usuario descargar un archivo CSV generado. Después de descargar el archivo, me gustaría redirigir al usuario a una nueva URL o acción. ¿Hay un truco para hacer una redirección después de send_data?Rieles ¿cómo puedo exportar datos con send_data y luego redireccionar a una página nueva?

quiero hacer algo como esto (que no funciona):

send_data(output,:type => content_type,:filename => "myfile.csv") 
redirect_to :controller => 'my_controller', :action => 'download_done' 
+0

¿Qué sucede cuando ejecuta el código que dio como ejemplo? – vrish88

+0

nada, sin descarga, sin redirección. Parece que send_data se considera un "render" por los rieles. Pensé que causaría una excepción si ese fuera realmente el caso. – daustin777

Respuesta

9

send_data es un render, por lo que no se puede hacer nada después de que en un método controlador.

Las formas de evitarlo implican Javascript. He aquí una manera Pirateé juntos y nunca me gustó:

  • éxitos usuario se someten
  • pequeña ventana aparece y se conecta con el controlador para descargar el archivo
  • ventana principal vuelve a dirigir a la siguiente página

Finalmente, convertí la generación de archivos en un trabajo en segundo plano. Luego el usuario fue a una página de trabajos (que no necesitó una redirección posterior) para obtener los archivos.

+0

gracias- ¡esto funcionó bien para mis necesidades! – daustin777

+0

Esta técnica funcionó bien hasta que apareció un usuario con IE6 y configuraciones de seguridad del navegador muy estrictas y dejó de funcionar. Terminé usando un