为什么只有第一页结果导出到 csv?
Why only first page results get exported to csv?
我试图在导出到 CSV 时获取 ALL 过滤结果。
我的 to_csv
工作正常,我怀疑与我的控制器有关。
使用 kaminari、ransack 进行搜索,但似乎很少使用 ransack 导出到 csv。
非常感谢任何帮助。
controller.rb
@search = Order.includes(:user, :order_items).ransack(params[:q])
@orders = @search.result.order(created_at: :desc).page(params[:page])
respond_to do
|format|
format.html
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
end
view.html.haml
= link_to 'Download as CSV', a_o_path(request.params.merge(format: 'csv')), { class: 'btn btn-primary', style: 'float: right;' }
您可以使用 ransack 和 kaminari 来执行此操作,但您需要稍微更新一下控制器。这是您目前拥有的:
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
当你的控制器到达这里时,@orders
已被 ransack 过滤,但它也已被 kaminari 分页。由于您在某些情况下使用 html 进行响应,而在其他情况下使用 csv,因此当您使用 csv 进行响应时,您需要做一些稍微不同的事情。
以下是我会尝试的方法:
@search = Order.includes(:user, :order_items).ransack(params[:q])
@orders = @search.result.order(created_at: :desc)
respond_to do |format|
format.html { @orders = @orders.page(params[:page]) }
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
end
基本上,您仅在使用 html 响应时才对查询进行分页。当请求 csv 时,所有订单仍将存在。
我试图在导出到 CSV 时获取 ALL 过滤结果。
我的 to_csv
工作正常,我怀疑与我的控制器有关。
使用 kaminari、ransack 进行搜索,但似乎很少使用 ransack 导出到 csv。
非常感谢任何帮助。
controller.rb
@search = Order.includes(:user, :order_items).ransack(params[:q])
@orders = @search.result.order(created_at: :desc).page(params[:page])
respond_to do
|format|
format.html
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
end
view.html.haml
= link_to 'Download as CSV', a_o_path(request.params.merge(format: 'csv')), { class: 'btn btn-primary', style: 'float: right;' }
您可以使用 ransack 和 kaminari 来执行此操作,但您需要稍微更新一下控制器。这是您目前拥有的:
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
当你的控制器到达这里时,@orders
已被 ransack 过滤,但它也已被 kaminari 分页。由于您在某些情况下使用 html 进行响应,而在其他情况下使用 csv,因此当您使用 csv 进行响应时,您需要做一些稍微不同的事情。
以下是我会尝试的方法:
@search = Order.includes(:user, :order_items).ransack(params[:q])
@orders = @search.result.order(created_at: :desc)
respond_to do |format|
format.html { @orders = @orders.page(params[:page]) }
format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }
end
基本上,您仅在使用 html 响应时才对查询进行分页。当请求 csv 时,所有订单仍将存在。