如何使用MongoDB中的ActionController :: Live下载CSV数据?

时间:2016-09-01 07:37:48

标签: ruby-on-rails export-to-csv server-sent-events actioncontroller

我在像这样的控制器中创建了一个CSV下载器

format.csv do
  @records  = Model.all

  headers['Content-Disposition'] = "attachment; filename=\"products.csv\"" 
  headers['Content-Type'] ||= 'text/csv'
end

现在我想创建server sent events以从中下载CSV以进行优化。我知道我可以使用ActionController::Live在Rails中执行此操作,但我没有使用它的经验。

有人可以向我解释我如何

  1. 将记录作为批次查询
  2. 将记录添加到stream
  3. 从浏览器端处理sse
  4. 将记录写入CSV文件
  5. 如果我的任何假设是错误的,请纠正我。帮助我以更好的方式做到这一点。谢谢。

1 个答案:

答案 0 :(得分:0)

Mongoid会自动批量查询您的记录(here上的更多信息)

要将记录添加到CSV文件,您应该执行以下操作:

records = MyModel.all
# By default batch_size is 100, but you can modify it using .batch_size(x)

result = CSV.generate do |csv|
  csv << ["attribute1", "attribute2", ...]
  records.each do |r|
    csv << [r.attribute1, r.attribute2, ...]
  end
end

send_data result, filename: 'MyCsv.csv'

请记住send_data是一个ActionController方法!