如何在Ruby中使用FasterCSV创建多个CSV文件

电话

我是红宝石的新手。我有一个问题,如何一键导出两个文件。

在现有版本中,通过调用'def stream_csv'一次只能生成一个文件,但是当我尝试两次调用它以获取两个文件时,出现了指示“ ActionController :: DoubleRenderError的错误(只能渲染或每个操作一次重定向):“我猜是因为渲染。

这是stream_csv的源代码:

def stream_csv
    require 'fastercsv'

        filename = params[:action] + ".csv"

        #this is required if you want this to work with IE      
        if request.env['HTTP_USER_AGENT'] =~ /msie/i
            headers['Pragma'] = 'public'
            headers["Content-type"] = "text/plain"
            headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
            headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""
            headers['Expires'] = "0"
        else
            headers["Content-Type"] ||= 'text/csv'
            headers["Content-Disposition"] = "attachment; filename=\"#{filename}\""
            controller.response.headers["Content-Transfer-Encoding"] = "binary"
        end

        render :text => Proc.new { |response, output|
            csv = FasterCSV.new(output, :row_sep => "\r\n")
            yield csv
        }
    end
end

一键创建两个文件是否可能?如果是,我该怎么办?

迪福

您是对的,这是因为render设置headers,然后最终调用时render,您正在构建一个HTTP响应,该响应将发送到浏览器。您无法通过一个HTTP请求执行两次操作,这就是为什么要获得的原因ActionController::DoubleRenderError

一次发送多个.csv文件的一种方法是将它们组合到一个.zip文件中,然后发送文件而不是原始.csv文件。有一个优秀的,非常易于使用的rubyzipgem可以用来构建.zip文件。

无需在内部调用render stream_csv,只需返回FasterCSV实例本身或它的String输出即可。从调用方法中,您可以构建一个.zip文件(我这里不包括代码,因为我只是从README上面的gem进行复制和粘贴

最后,不用设置太多标题来强制下载,而要看一下Railssend_file方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在mapreduce中使用多个CSV文件

来自分类Dev

如何在python中使用to_csv保存多个csv文件?

来自分类Dev

如何在python中使用CSV文件的第一行创建列表

来自分类Dev

如何在Python中使用CSV文件的唯一值创建列表?

来自分类Dev

如何在Ruby中使用多个布尔变量重构方法

来自分类Dev

如何在Ruby中使用多个.each语句?

来自分类Dev

如何在等式中使用多个整数(Ruby)

来自分类Dev

如何在空手道中的单个功能文件中使用两个或多个csv文件?

来自分类Dev

如何在python中使用循环创建多个类对象?

来自分类Dev

如何在Java中使用动态数据创建多个arraylist

来自分类Dev

如何在PHP中使用if多个语句创建变量并打印

来自分类Dev

如何在Ruby中使用'〜'指定文件路径?

来自分类Dev

如何在 Ruby 中使用 Post 请求发送 XML 文件

来自分类Dev

如何在C#中使用GZipStream压缩多个文件

来自分类Dev

如何在vs代码中使用多个tsconfig文件?

来自分类Dev

如何在终端中使用avconv转换多个文件?

来自分类Dev

如何在Onsenui中使用多个HTML文件

来自分类Dev

如何在SSIS中使用多个名称空间文件

来自分类Dev

如何在多个svg文件中使用字体字形?

来自分类Dev

如何在多个.cpp文件中使用全局变量?

来自分类Dev

如何在多个文件中使用基本的html代码结构

来自分类Dev

如何在Duktape中使用多个js文件?

来自分类Dev

如何在多个文件中使用全局变量

来自分类Dev

如何在终端中使用avconv转换多个文件?

来自分类Dev

如何在php中使用smarty上传多个文件?

来自分类Dev

如何在C#中使用GZipStream压缩多个文件

来自分类Dev

如何在Perl中使用YAML加载多个文件

来自分类Dev

如何在我的htaccess文件中使用多个RewriteCond?

来自分类Dev

如何在 CodeIgniter 中使用多个缓存文件夹

Related 相关文章

  1. 1

    如何在mapreduce中使用多个CSV文件

  2. 2

    如何在python中使用to_csv保存多个csv文件?

  3. 3

    如何在python中使用CSV文件的第一行创建列表

  4. 4

    如何在Python中使用CSV文件的唯一值创建列表?

  5. 5

    如何在Ruby中使用多个布尔变量重构方法

  6. 6

    如何在Ruby中使用多个.each语句?

  7. 7

    如何在等式中使用多个整数(Ruby)

  8. 8

    如何在空手道中的单个功能文件中使用两个或多个csv文件?

  9. 9

    如何在python中使用循环创建多个类对象?

  10. 10

    如何在Java中使用动态数据创建多个arraylist

  11. 11

    如何在PHP中使用if多个语句创建变量并打印

  12. 12

    如何在Ruby中使用'〜'指定文件路径?

  13. 13

    如何在 Ruby 中使用 Post 请求发送 XML 文件

  14. 14

    如何在C#中使用GZipStream压缩多个文件

  15. 15

    如何在vs代码中使用多个tsconfig文件?

  16. 16

    如何在终端中使用avconv转换多个文件?

  17. 17

    如何在Onsenui中使用多个HTML文件

  18. 18

    如何在SSIS中使用多个名称空间文件

  19. 19

    如何在多个svg文件中使用字体字形?

  20. 20

    如何在多个.cpp文件中使用全局变量?

  21. 21

    如何在多个文件中使用基本的html代码结构

  22. 22

    如何在Duktape中使用多个js文件?

  23. 23

    如何在多个文件中使用全局变量

  24. 24

    如何在终端中使用avconv转换多个文件?

  25. 25

    如何在php中使用smarty上传多个文件?

  26. 26

    如何在C#中使用GZipStream压缩多个文件

  27. 27

    如何在Perl中使用YAML加载多个文件

  28. 28

    如何在我的htaccess文件中使用多个RewriteCond?

  29. 29

    如何在 CodeIgniter 中使用多个缓存文件夹

热门标签

归档