CSV在Safari视图中呈现,但我希望它下载文件

时间:2011-07-05 20:03:54

标签: ruby-on-rails safari mime-types fastercsv

我配置了自定义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呈现为视图:如何更改此值并强制下载为文件?

查看问题的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

我在旧的Rails 2应用程序中使用此方法的方法是在控制器中使用send_data而不是render。 E.g:

def csv
  ... # build data
  send_data csv_data_as_string, :filename => "#{filename}.csv", :type => 'text/csv'
end