Forum: Rails-ES Descargar fichero XML

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.
Tomás A. (Guest)
on 2008-10-06 10:56
Tengo una duda que llevo tiempo dándole vueltas y no he podido darle
solución.
En un controlador tengo:

  def index
    @articles = current_user.articles

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :action => "articles.xml.builder", :layout =>
false }
    end
  end

En articles.xml.builder genero el XML utilizando XmlMarkup. Y ahora, en
las vistas, puedo crear algún enlace del tipo:

link_to "Descargar XML", formatted_articles_path(:xml)

Pero esto lo que hace es mostrarme en el propio navegador el contenido
del fichero XML.
¿Habría posibilidad de forzar la descarga del fichero? Me interesa que
el usuario se descargue ese fichero, y no lo visualice por el navegador.

Gracias por anticipado.
Francesc E. (Guest)
on 2008-10-06 11:21
(Received via mailing list)
2008/10/6 Tomás Arcos <removed_email_address@domain.invalid>:

> En articles.xml.builder genero el XML utilizando XmlMarkup. Y ahora, en
> las vistas, puedo crear algún enlace del tipo:

> Pero esto lo que hace es mostrarme en el propio navegador el contenido
> del fichero XML.

> ¿Habría posibilidad de forzar la descarga del fichero? Me interesa que
> el usuario se descargue ese fichero, y no lo visualice por el navegador.

Por ejemplo algo como esto ...

    class ArticlesController < ApplicationController

      def index
        @articles = Article.find(:all)
        respond_to do |format|
          format.html
          format.xml { send_data render_to_string :xml => @articles }
        end
    end

    end
Tomás A. (Guest)
on 2008-10-06 11:23
Hola Tomás,
muchas gracias por tu respuesta, me autocontesto yo también por si le
sirve a alguien:

headers["Content-Type"] = "application/xml"
headers["Content-Disposition"] = "attachment;
filename=\"#{current_user.name}.xml\""

Voy a probar tu solución también

Un saludo.
Francesc E. (Guest)
on 2008-10-06 11:31
(Received via mailing list)
2008/10/6 Tomás Arcos <removed_email_address@domain.invalid>:

> headers["Content-Type"] = "application/xml"
> headers["Content-Disposition"] = "attachment;
> filename=\"#{current_user.name}.xml\""

Buena solución tambien, quizas más elegante.
Xavier N. (Guest)
on 2008-10-06 11:47
(Received via mailing list)
2008/10/6 Tomás Arcos <removed_email_address@domain.invalid>:

> headers["Content-Type"] = "application/xml"
> headers["Content-Disposition"] = "attachment;
> filename=\"#{current_user.name}.xml\""

Esta disponible via la API:

   send_data(
     ...,
     :type        => ...,
     :filename    => ...,
     :disposition => ...
   )
This topic is locked and can not be replied to.