我想做什么:将数据导出到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'
答案 0 :(得分:0)
send_data正在尝试引用超出范围的对象。检查结束'结束'声明