使用JQueryMobile的Rails - 使用send_data进行双重渲染

时间:2013-07-10 11:18:55

标签: ruby-on-rails ruby

我使用此代码在报表控制器中创建动态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链接不能正常模式。

2 个答案:

答案 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”用于内部链接。