电子表格Rails 3问题

我已将rails 2.3.10应用程序升级到Rails 3.0.3。 在我的应用程序中,我有像用户可以将数据下载到Excel中的function。

我的gem版:电子表格-0.6.4.1

我在Gemfile和Mime :: Type.register_alias“application / excel”中声明了gem版本,:application.rb中的xls。 和我的excel generationg代码如下

 'myname' data.row(0).concat %w{name email} header_format = Spreadsheet::Format.new :color => :green, :weight => :bold data.row(0).default_format = header_format @names.results_data.each_with_index { |n, i| data.row(i+1).push n.name,n.email } blob = StringIO.new('') book.write(file_blob) -%> 

我的控制器代码是:

 respond_to do |format| format.html format.rss format.xls { view_output = render_to_string :action => "excel" <"application/ms-excel", :filename => "name.xls") } 

问题是当点击excel链接时,它会打开excel窗口,并且弹出窗口中的名称’name.xls [2]无法访问。 可能已损坏或只读…我已经改变了所有的可能性,如gem升级,哑剧型改变但没有运气……

任何人都可以说出错误是什么

两个想法:

  1. excel.xls.erb不需要是一个erb文件。 您可以轻松地将其放在当前控制器中的帮助器或其他方法中。 我知道ERb语义在rails 3中改变了一堆 ,所以这可能是你错误的原因。

      def render_to_xls(names, name = 'myname') book = Spreadsheet::Workbook.new data = book.create_worksheet :name => name data.row(0).concat %w{name email} header_format = Spreadsheet::Format.new :color => :green, :weight => :bold data.row(0).default_format = header_format names.results_data.each_with_index { |n, i| data.row(i+1).push n.name,n.email } blob = StringIO.new('') book.write(blob) blob end 

    然后,在您的响应者代码中:

      respond_to do |format| format.html format.rss format.xls { send_data(render_to_xls(@names, name), :type=>"application/ms-excel", :filename => "name.xls") } 
  2. 尝试对当前的excel文件执行先前excel文件的diff,看看是否存在奇怪的空白差异或类似的东西。