私がやろうとしているのは、データを 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'