Rails 5: экспорт набора результатов Ransack с помощью axlsx
Я пытаюсь сгенерировать файл Excel, используя гем Axlsx на основе набора результатов Ransack gem.
контроллер:
@q = Candy.ransack(params[:q])
@candies = @q.result.all
Когда я вызываю @candies с параметрами типа "шоколад" в представлении, используя драгоценный камень Ransack, я получаю 30 или около того результатов из 600. Он был успешно отфильтрован!
Но когда я загружаю @candies, используя axlsx, используя:
//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 - to_xls? Однако я столкнулся с той же проблемой при использовании гема axlsx вместо гема to_xls!
2 ответа
- Объедините параметры, чтобы включить соответствующий тип формата, который вы загружаете. Соответствующий путь для моего приложения: 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
конец
@q = Candy.ransack(params[:q])
@candies = @q.result.page
puts "total record = #{@candies.count}"
Я думаю, вы установили ограничение на отображение страниц в пользовательском интерфейсе. Используйте.page для фильтрации и отправки той же переменной var в файл axslx.
Ваш результат поиска должен быть без "всего"
@q = Candy.ransack(params[:q])
@candies = @q.result
put "total record = ", @candies.count
Я добавляю метод трассировки, чтобы вы могли отслеживать результат, вы можете проверить результат из консоли сервера rails / файла журнала разработки.