Ruby on rails Rails-CSV导出:提示文件下载
我想让我的用户能够将表导出到CSV 因此,在我的控制器中,我在文件顶部添加了:Ruby on rails Rails-CSV导出:提示文件下载,ruby-on-rails,csv,Ruby On Rails,Csv,我想让我的用户能够将表导出到CSV 因此,在我的控制器中,我在文件顶部添加了: respond_to :html, :js, :csv 如果请求的格式为csv,我还将设置标题: if params[:format] == 'csv' generate_csv_headers("negotiations-#{Time.now.strftime("%Y%m%d")}") end 生成\u csv\u头的代码(在应用程序\u控制器中)为: 我还创建了一个名为index.csv.erb的视
respond_to :html, :js, :csv
如果请求的格式为csv,我还将设置标题:
if params[:format] == 'csv'
generate_csv_headers("negotiations-#{Time.now.strftime("%Y%m%d")}")
end
生成\u csv\u头的代码(在应用程序\u控制器中)为:
我还创建了一个名为index.csv.erb
的视图来生成我的文件:
<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers %>
<%- @negotiations.each do |n| -%>
<%- row = [ n.id,
n.name ] -%>
<%= CSV.generate_line row %>
<%- end -%>
我没有任何错误,但它只是显示CSV文件的内容,而我希望浏览器会提示下载该文件
我读了很多书,但找不到任何有用的。
你有什么想法吗
谢谢,p.我不确定您是否必须这样做,但是如果您生成并保存文件,您可以使用send_file将其发送到浏览器。请参见我仍然不确定为什么这样做可以解决问题,但它确实解决了问题
我将视图中的链接更改为
<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%>
:csv})%>
现在它可以工作了 您可能会对我制作的名为CSV shaper的gem感兴趣,它允许您使用非常好的Ruby DSL创建CSV输出
它还可以正确设置响应头,同时允许文件名自定义
2件事:我正在动态生成数据,我注意到我肯定无法编写文件(我在Heroku上)。在
<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%>