2

我在报告控制器中使用此代码创建动态 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 链接无法在正确的模式下工作。

4

2 回答 2

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).
于 2013-07-10T13:58:01.943 回答
1

将 data-ajax="false" 添加到链接的属性中。默认情况下,链接在 jQuery Mobile 中使用 Ajax 加载。

<a data-ajax="false" href="<%=url_for :controller=>"reports",:action =>"exportCsv"%>">Clicca qui</a>

根据文档,您还可以使用 rel="external" 这也将阻止 Ajax 加载。两者之间的区别在于语义:rel="external" 应该在链接到域外的 url 时使用,而 data-ajax="false" 用于内部链接。

于 2013-07-10T15:36:14.557 回答