加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 流式CSV从Rails 3.2应用程序下载

发布时间:2020-12-17 02:43:34 所属栏目:百科 来源:网络整理
导读:我迫切希望在我的Rails 3.2.2应用程序中获得流式CSV下载. 我已经尝试了’csv_builder’宝石(https://github.com/dasil003/csv_builder),它宣传支持这个功能,但似乎Rails 3.2中有一些变化使它无法工作(它产生了一个应用启动时出现“未初始化的常量ActionView
我迫切希望在我的Rails 3.2.2应用程序中获得流式CSV下载.

我已经尝试了’csv_builder’宝石(https://github.com/dasil003/csv_builder),它宣传支持这个功能,但似乎Rails 3.2中有一些变化使它无法工作(它产生了一个应用启动时出现“未初始化的常量ActionView :: Template :: Handler”错误.

还有其他想法或解决方案吗?谢谢!

编辑:为了澄清,我需要将模型的所有条目导出为CSV文件.有很多行,它是超时的…因此需要流式传输.我过去曾使用过逗号宝石(https://github.com/crafterm/comma),但此刻它也不支持流式传输.

解决方法

好的,经过一番研究后,我在控制器中将以下内容整合在一起.如果给予response_body一些可枚举的东西(这是一个单词吗?),它会流.此外,服务器需要能够流(我在Heroku上使用Unicorn).我非常想在控制器中没有所有这些东西,所以我的下一步是以某种方式提取出来.

format.csv {
    @entries = Entry.all
    @columns = ["First Name","Last Name"].to_csv
    @filename = "entries-#{Date.today.to_s(:db)}"

    self.response.headers["Content-Type"] ||= 'text/csv'
    self.response.headers["Content-Disposition"] = "attachment; filename=#{@filename}"
    self.response.headers["Content-Transfer-Encoding"] = "binary"

    self.response_body = Enumerator.new do |y|
      @entries.each_with_index do |entry,i|
        if i == 0
          y << @columns
        end
        y << [entry.first_name,entry.last_name].to_csv
      end
    end
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读