Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-CSV导出:提示文件下载_Ruby On Rails_Csv - Fatal编程技术网

Ruby on rails Rails-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的视

我想让我的用户能够将表导出到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
的视图来生成我的文件:

<%- 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})%>