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 回答