我使用此代码在报表控制器中创建动态csv文件:
def exportCsv
@report = Report.find(:all)
csv = CSV.generate do |csv|
csv << ["id","cod_user_id","city","address","urgent level","description"]
@report.each do |r|
csv << [r.id,r.cod_user_id,r.city,r.address,r.urgent_level,r.description]
end
end
send_data csv, :type => 'text/csv', :disposition => "attachment; filename=list.csv"
end
show.html.erb文件中的链接代码为:
<a href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>
当我点击链接时,下载无法启动,并显示白页。仅当我刷新白页时才开始下载。当我点击下载链接时,我希望当前打开的页面保持打开状态并开始下载。
更新我 我使用jquery.mobile-1.3.1如果我不使用jquery mobile它工作,下载开始,当前页面将保持打开但如果我使用jquery-mobile链接不能正常模式。
答案 0 :(得分:1)
尝试使用以下内容:
send_data csv, :type => 'text/csv', :disposition => "attachment", :filename => "list.csv"
来自send_data
文档(http://apidock.com/rails/ActionController/Streaming/send_data):
:disposition - specifies whether the file will be shown inline or downloaded.
Valid values are ‘inline’ and ‘attachment’ (default).
答案 1 :(得分:1)
将data-ajax =“false”添加到链接的属性中。默认情况下,链接在jQuery Mobile中加载了Ajax。
<a data-ajax="false" href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>
根据文档,您还可以使用rel =“external”,这也会阻止Ajax加载。两者之间的区别是语义:当链接到域外的URL时,应使用rel =“external”,而data-ajax =“false”用于内部链接。