【问题标题】:export to csv using fastercsv and CSV::Writer (Ruby on Rails)使用 fastcsv 和 CSV::Writer (Ruby on Rails) 导出到 csv
【发布时间】:2009-11-25 16:17:09
【问题描述】:

我想做什么:将数据导出到 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 控制台中看到响应为“一些文本,文本 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'

【问题讨论】:

    标签: csv fastercsv


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2012-02-14
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多