
[英]how to check the csv contain a specific column header in ruby using fastercsv
[英]How to create multiple CSV file by using FasterCSV in Ruby
我对红宝石很新。 我有一个问题,如何在一次点击中导出两个文件。
在exsiting版本中,我可以通过调用'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
文件。 有一个非常好的,非常容易使用的rubyzip
gem ,可用于构建.zip
文件。
您可以简单地返回FasterCSV
实例本身或它的String输出,而不是在stream_csv
中调用render。 从调用方法,你可以建立一个.zip文件(我不包括这里的代码,因为我只是从上面的gem的README
中复制和粘贴) 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.