Rails 5:使用axlsx导出Ransack结果集

时间:2017-08-15 01:20:28

标签: ruby-on-rails ruby web ransack axlsx

我正在尝试使用基于Ransack gem结果集的axlsx gem生成Excel文件。

控制器:

@q = Candy.ransack(params[:q])
@candies = @q.result.all

当我使用Ransack gem在视图中使用像“chocolate”这样的参数调用@candies时, 我从600中获得了30个左右的结果。它已成功过滤!

但是当我使用axlsx下载@candies时使用:

//index.xlsx.axlsx

    require 'axlsx'
    xlsx_package = Axlsx::Package.new

    workbook = xlsx_package.workbook

    workbook.add_worksheet(name: "Candies") do |sheet|
    sheet.add_row ["id", "name", "type", "date"]

        @candies.each do |candy|
             sheet.add_row [candy.id, candy.name, candy.type, candy.date]
        end
    end

它生成包含所有600条记录的文件!

此问题与Ransack Search Results - to_xls?非常相似 但是我使用axlsx gem而不是to_xls gem遇到了同样的问题!

3 个答案:

答案 0 :(得分:0)

您的搜索结果应该没有"所有"

@q = Candy.ransack(params[:q])
@candies = @q.result
put "total record = ", @candies.count

我添加了trace方法,因此您可以跟踪结果,可以从rails服务器控制台/开发日志文件中检查结果

答案 1 :(得分:0)

  • 合并参数以包含要下载的相关格式类型。我的应用程序的相关路径为:search_shifts_path-您的路径将有所不同,因此请相应地进行更改。

然后确保已在控制器中允许相关参数。鉴于我们没有更改任何字段,因此可以放心地这样做:

def search
  params.permit![:format] # must permit this

  @q = Shift.ransack(params[:q])
  @shifts = @q.result

  respond_to do |format|
    format.xlsx
    format.html
  end

结束

答案 2 :(得分:0)

@q = Candy.ransack(params[:q])
@candies = @q.result.page
puts "total record = #{@candies.count}"

我认为您已设置要在UI上显示的页面限制。使用.page过滤并将相同的var发送到axslx文件。