1

我在做什么:将数据导出到 csv。

我有一个允许用户选择格式的表单(从下拉菜单中)。因此,根据格式的选择,使用 ajax 调用显示输出。适用于 html,但是当我选择格式为 csv 时,我在屏幕上看不到任何弹出窗口(要求保存或打开文件),也没有直接下载任何文件。

我尝试使用 Fastercsv(但问题是我没有看到任何弹出窗口询问我是否要保存或打开文件)和 CSV::Writer 我在控制台上收到此错误消息。

NoMethodError (You have a nil object when you didn't expect it!
The error occurred while evaluating nil.bytesize):
  actionpack (2.3.4) lib/action_controller/streaming.rb:142:in `send_data'

使用 Fastercsv 的代码:

   def export_to_csv
    csv_string = FasterCSV.generate(:col_sep => ",") do |csv|
      members = ["Versions / Project Members"]
      members_selected.each {|member| members << Stat.member_name(member)}
      Stat.project_members(project).each {|user| members << user.name}
      csv << ["some text", "text 2", "text 3"]
    end
    return csv_string
   end

这就是我发送数据的方式:

  send_data(export_to_csv,:type => 'text/csv; charset=iso-8859-1; header=present',
                     :disposition => "attachment", :filename => "filename.csv")

我在萤火虫控制台中看到响应为“一些文本,文本 2,文本 3”,但没有弹出询问我是否要保存或打开文件。

这就是我使用 CSV::Writer 所做的事情:

   def export_to_csv
     report = StringIO.new
      CSV::Writer.generate(report, ',') do |csv|
        csv << ['c1', 'c2']
      end
  end

并将其称为:

 send_data(export_to_csv,:type => 'text/csv; charset=iso-8859-1; header=present',
                     :disposition => "attachment", :filename => "filename.csv")

这是控制台上抛出的错误:

NoMethodError (You have a nil object when you didn't expect it!
The error occurred while evaluating nil.bytesize):
  actionpack (2.3.4) lib/action_controller/streaming.rb:142:in `send_data'
4

1 回答 1

0

send_data 正在尝试引用超出范围的对象。检查您的结束“结束”声明

于 2010-06-17T03:48:22.340 回答