5

カスタムmimeタイプを構成しました:

ActionController::Renderers.add :csv do |csv, options|
  self.content_type ||= Mime::CSV
  self.response_body  = csv.respond_to?(:to_csv) ? csv.to_csv : csv
end

コントローラーのrespond_toブロック:

respond_to do |format|
    format.html
    format.csv { render :csv => csv_code}
  end   

FirefoxとChromeを使用すると、.csvはダウンロードされたファイルにレンダリングされます。Safariを使用すると、.csvがビューとしてレンダリングされます。これを変更してファイルとして強制的にダウンロードするにはどうすればよいですか?

問題のスクリーンショットを参照してください。

ここに画像の説明を入力してください

4

2 に答える 2

10

試す

respond_to do |format|
    format.html
    format.csv do
        response.headers['Content-Type'] = 'text/csv'
        response.headers['Content-Disposition'] = 'attachment; filename=thefile.csv'    
        render :csv => csv_code
    end
end 

これが機能しない場合は、使用してみてください

send_file "path/to/file.csv", :disposition => "attachment"
于 2011-07-05T20:11:19.563 に答える
0

古いRails 2アプリでこれを機能させる方法は、コントローラーではsend_dataなく使用しています。render例えば:

def csv
  ... # build data
  send_data csv_data_as_string, :filename => "#{filename}.csv", :type => 'text/csv'
end
于 2011-07-05T20:17:02.583 に答える