我正在尝试使用基于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遇到了同样的问题!
答案 0 :(得分:0)
您的搜索结果应该没有"所有"
@q = Candy.ransack(params[:q])
@candies = @q.result
put "total record = ", @candies.count
我添加了trace方法,因此您可以跟踪结果,可以从rails服务器控制台/开发日志文件中检查结果
答案 1 :(得分:0)
然后确保已在控制器中允许相关参数。鉴于我们没有更改任何字段,因此可以放心地这样做:
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文件。