我配置了自定义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呈现为视图:如何更改此值并强制下载为文件?
查看问题的屏幕截图:
答案 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