2009-11-25 59 views
1

我該怎麼做:將數據導出到csv。使用fastercsv和CSV :: Writer(Ruby on Rails)導出到csv

我有一個允許用戶選擇格式(從下拉菜單)的形式。所以根據格式的選擇,使用ajax調用來顯示輸出。適用於html,但當我選擇格式爲csv時,屏幕上沒有看到任何彈出窗口(要求保存或打開文件),也沒有任何文件直接下載。

我試過使用Fastercsv(但問題是我沒有看到任何彈出問我是否要保存或打開文件)和CSV :: Writer,我在控制檯上得到這個錯誤信息。使用Fastercsv

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' 

代碼:

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做::編劇:

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

send_data正在嘗試引用超出範圍的對象。檢查您的結束'結束'聲明