首页 > 解决方案 > 分页限制了我的 csv 导出

问题描述

我在我的应用程序中添加了 csv 导出和分页功能。

父.rb

    CSV_HEADER = %w[parent_1_firstname parent_1_lastname address]
    def self.to_csv
        CSV.generate do |csv|
        csv << CSV_HEADER
        all.each do |parent|
      csv << [
        parent.parent_1_firstname, 
        parent.parent_1_lastname, 
        parent.address

      ]
    end
   end
  end

控制器.rb

def main_admin
        require 'csv'

        add_breadcrumb "Admin"
    @filterrific = initialize_filterrific(
      Parent,
      params[:filterrific],
      select_options: {
        with_status: Parent.options_for_status
            }
    )   or return   
    @parents = @filterrific.find.paginate(:page => params[:page], :per_page => 10)

    respond_to do |format|
      format.html
      format.js
      format.csv { send_data @parents.to_csv }
    end
    rescue ActiveRecord::RecordNotFound => e
        puts "Had to reset filterrific params: #{ e.message }"
        redirect_to(reset_filterrific_url(format: :html)) and return
    end

我面临的问题是当我在我的 main_admin.html.erb 页面上单击下载 CSV 时。下载的 CSV 只是前 10 个父母,但还有更多。就像大约300名父母一样。我无法弄清楚这个问题。请帮忙。

更新

if params[:format] == 'csv' then @filterrific.find.paginate(:page => params[:page], :per_page => 10)
    respond_to do |format|
        format.csv { send_data @parents.to_csv }
    else 
    @parents = @filterrific.find.paginate(:page => params[:page], :per_page => 10)
   respond_to do |format|
      format.html
      format.js
    end 

标签: ruby-on-railscsvruby-on-rails-5export-to-csv

解决方案


如果格式不是 csv,则将代码更改为仅使用分页

@parents = @filterrific.find
@parents = @parents.paginate(:page => params[:page], :per_page => 10) unless request.format == 'csv' #does pagination if not csv format

respond_to do |format|
  format.html
  format.js
  format.csv { send_data @parents.to_csv }
end

推荐阅读