1

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

1 に答える 1

0

send_dataは、スコープ外のオブジェクトを参照しようとしています。終了'end'ステートメントを確認してください

于 2010-06-17T03:48:22.340 に答える