ruby 在Rails 4中的ActiveAdmin中导出CSV导出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 在Rails 4中的ActiveAdmin中导出CSV导出相关的知识,希望对你有一定的参考价值。

#admin/users.rb to use in a single controller
ActiveAdmin.register User do
  controller do
    include ActiveAdmin::CSVStream
  end
end
# put in an autoloaded path, like lib/active_admin
require 'csv'

module ActiveAdmin

  module CSVStream
    
    # using ActionController::Live breaks warden
    # see https://github.com/plataformatec/devise/issues/2332
    # include ActionController::Live
    
    def apply_pagination(chain)
      chain = super unless formats.include?(:csv)
      chain
    end
    
    def index
      index! do |format|
        format.csv { render_csv }
      end
    end

    private
    
    def render_csv      
      set_csv_headers
      self.response_body = csv_lines
    end

    def set_csv_headers
      headers["Content-Type"] = "text/csv"
    end
    
    def csv_lines
      default = ActiveAdmin.application.csv_options
      options = default.merge active_admin_config.csv_builder.options
      columns = active_admin_config.csv_builder.columns
      
      Enumerator.new do |y|
        CSV.generate(options) do |csv|
          y << columns.map(&:name).to_csv
          #response.stream.write columns.map(&:name).to_csv
          collection.each do |resource|
            row = columns.map do |column|
              call_method_or_proc_on resource, column.data
            end.to_csv
            y << row
            #response.stream.write row
          end
        end
      end
      #response.stream.close
    end
    
  end
  
end
# if you want to monkey patch every controller, put this in initializers/active_admin.rb
ActiveAdmin::ResourceController.class_eval do
  include ActiveAdmin::CSVStream
end

以上是关于ruby 在Rails 4中的ActiveAdmin中导出CSV导出的主要内容,如果未能解决你的问题,请参考以下文章

Windows 中的 Jenkins 和 Ruby On Rails 4

未读取 database.yml 中的 ENV 变量(Rails 4.2.0、RubyMine 7、Postgres、Ruby 2.2.0、DotEnv)

Ruby on Rails - 在 OSX 上使用 Ruby 2.4.4 而不是 rails 5.1.6 的配置问题/异常

无法在 gem Devise 中调整控制器,ruby on rails 4

如何在 Ruby on Rails 4 中为 post 生成唯一的随机 id?

“bin/rails:没有这样的文件或目录”在 Heroku 上使用 Ruby 2 和 Rails 4