ruby-on-rails – Ruby on Rails中的send_data与Spreadsheet插件一起使用困难

我在控制器中有一个功能,它接受一些规范并生成一个报告.在视图中调用函数user_report:

< %= submit_to_remote’submit-button’,“将报告导出到Excel”,:url => {:controller => :reports,:action => :user_report,:print_state => ‘print’}%>

在reports_controller中,我使用Spreadsheet插件在user_report函数生成Excel文件.我想使用send_data将文件流式传输给用户,而不是先在服务器上创建它.我所做的研究表明,使用StringIO是可行的方法,如下所示.令人沮丧的是,当我调用send_data时没有任何反应.该插件似乎可以很好地创建一个文件并将其保存在服务器上,但在使用send_file时什么都不做,这表明问题不在于插件.但是我对send_file / send_data做错了什么?

函数本身如下所示:

def user_report

if request.post?
  unless params[:reports][:userid].blank?
    @userid=params[:reports][:userid]
  end
  if params[:print_state]=='print'  

    report = Spreadsheet::Workbook.new
    info = report.create_worksheet :name => 'User information'
    info.row(1).push 'User ID',@userid

    @outfile = "Report_for_#{@userid}.xls"

    require 'stringio'
    data = StringIO.new ''
    report.write data
    send_data data.string,:type=>"application/excel",:disposition=>'attachment',:filename => @outfile
  end

  respond_to do |format|
    format.js { }
  end
end

end

日志文件读取
2010-10-18 14:13:59 INFO – 发送数据Report_for_jjohnson.xls
但是没有在浏览器中开始下载.我之前在这个应用程序上成功使用了send_data,这令人困惑.

我在spreadsheet.rubyforge.org上使用Rails v2.3,Ruby v1.8.7和Spreadsheet v6.4.1.

解决方法

只需更改行:
send_data data.string,:filename => @outfile

至:

send_data data.string.bytes.to_a.pack("C*"),:filename => @outfile

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...