xml file download prompt instead of displaying in browser?

1,237 views
Skip to first unread message

Nik

unread,
Oct 13, 2008, 7:54:52 PM10/13/08
to Ruby on Rails: Talk
Hello all,

I am trying to export some xml files on the web app as a download, but
Firefox/chrome/ie/safari all just display the xml content on
themselves. How can I have the download prompt? Like I am downloading
a .exe file?

Thank You

Simon Macneall

unread,
Oct 13, 2008, 8:10:56 PM10/13/08
to rubyonra...@googlegroups.com
Hi Nik,

This is what we have and it seems to work in all the browsers

response.body = xml.to_s
response.content_type = "application/x-generated-xml-backup";
filename = "Filename.xml"
response.headers['Content-disposition'] = "Attachment;
filename=\"#{filename}\""
render :text => xml.to_s

Cheers
Simon

Nik

unread,
Oct 16, 2008, 6:59:04 PM10/16/08
to Ruby on Rails: Talk
Thanks Simon,

Where should I put this code? I have in my controller:

#Controller

def exportxml
if params[:item_ids]
@items = Item.find(params[:item_ids])

respond_to do |format|
format.xml {render :layout=>false}
end
end
end

Cheers!
Nik
On Oct 13, 5:10 pm, "Simon Macneall" <macne...@gmail.com> wrote:
> HiNik,
>
> This is what we have and it seems to work in all the browsers
>
>      response.body = xml.to_s
>      response.content_type = "application/x-generated-xml-backup";
>      filename = "Filename.xml"
>      response.headers['Content-disposition'] = "Attachment;  
> filename=\"#{filename}\""
>      render :text => xml.to_s
>
> Cheers
> Simon
>

zuo peng

unread,
Oct 16, 2008, 9:47:18 PM10/16/08
to rubyonra...@googlegroups.com
def exportxml
if params[:item_ids]
@items = Item.find(params[:item_ids])

respond_to do |format|
format.xml {
send_data @items.to_xml, :filename => "items.xml"
}
end
end
end

--

Satchel Paige - "Don't look back. Something might be gaining on you."

Nik

unread,
Oct 16, 2008, 10:56:43 PM10/16/08
to Ruby on Rails: Talk
Hi Zuo,

Thank You! It works. Brilliantly. And thank you, too Simon!

All the best,
Nik

Nik

unread,
Oct 27, 2008, 1:15:24 PM10/27/08
to Ruby on Rails: Talk
Hi Zuo,

It works! But the XML structure I used in the builder is now lost. The
XML file is now filled with the data from the columns.

Is there a way I can use my builder and your method?

Does anyone have an idea on this ?

Thanks!
Nik

zuo peng

unread,
Oct 27, 2008, 10:38:51 PM10/27/08
to rubyonra...@googlegroups.com
overwrite the to_xml method in your model or yield the builder object
as part of the to_xml

@item.to_xml do |xml|
# builder stuffs
end

--

Emo Philips - "My computer beat me at checkers, but I sure beat it at
kickboxing."

Nik

unread,
Oct 30, 2008, 3:59:39 PM10/30/08
to Ruby on Rails: Talk
Hi Zuo!

Thank you again for your help! I did this and it says that a "}" is
missing right after * as in :filename=>*

def exportxml
if params[:item_ids] ||= []
@items = Item.find(params[:item_ids])
respond_to do |format|
format.xml {send_data @items.to_xml do |xml|
xml.instruct!
xml.product do
for t in @items
xml.lineitem(:id=>t.name) do
xml.name(t.name)
xml.in(t.tradeIn/85.to_i)
end
xml.logginginfo do
xml.lognote(t.note)
end
end
end
end
end
:filename=> "items.xml"}
end
end
end

The builder stuff is copied straight from the exportxml.xml.builder.

And I don't know if this is helpful -- if I removed
the :filename=>"items.xml" from above, it downloads! Yet, it again
saves the file without extension and gives me the array of the columns
of the table instead of my builder scheme.

I am sorry to have to ask for your help again.

Thank you
Reply all
Reply to author
Forward
0 new messages