Descargar fichero XML


#1

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.


#2

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

#3

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.


#4

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 => …
)


#5

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.