活动管理CSV导出自定义查询作用域

时间:2014-01-06 09:07:58

标签: ruby-on-rails ruby activeadmin

使用主动管理导出CSV选项。它返回与特定表相关的所有值。

我希望报告仅针对特定月份。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:16)

你可以编写自己的csv导出程序

collection_action :download_report, :method => :get do
    users = User.where('created_at >= ?', Date.today - 1.month)
      csv = CSV.generate( encoding: 'Windows-1251' ) do |csv|
      # add headers
      csv < [ #Some header ]
      # add data
      users.each do |user|
        csv << [ user.created_at ]
      end      
    end
    # send file to user
    send_data csv.encode('Windows-1251'), type: 'text/csv; charset=windows-1251; header=present', disposition: "attachment; filename=report.csv"
  end

  action_item only: :index do
    link_to('csv report'), params.merge(:action => :download_report))
  end 

  index :download_links => false do
    # off standard download link
  end

这是只是示例。您的代码可以是另一个

答案 1 :(得分:1)

生成csv文件的

使用此代码

# generate csv file of photo
  def self.generate_csv
    header = []
    csv_fname = "#{CSV_FILE_PATH}/images.csv"
    options = {headers: :first_row}
    photo_columns = column_names - ["id", "updated_at"]
    photo_columns.map{|col| col == "created_at" ? header << "ScrapeDate" : header << col.classify}
    CSV.open(csv_fname, "w", options ) do |csv|
      csv << header if File.exist?(csv_fname) && File.size(csv_fname) == 0
      find_each(batch_size: 5000) do |photo|
        csv << photo.attributes.values_at(*photo_columns)
      end
    end
  end

在上面的代码中你不想从哪个列中减去cols来自实际cols,例如column_names - ["id", "updated_at"]这里column_names返回实际的cols数组,而我们不需要哪些cols我们减去它们。