使用fastercsv和CSV :: Writer(Ruby on Rails)导出到csv

时间:2009-11-25 16:17:09

标签: csv fastercsv

我想做什么:将数据导出到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")

我在firebug控制台中看到响应为“some text,text 2,text 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'

1 个答案:

答案 0 :(得分:0)

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