为什么只有第一页结果才会导出到csv?

时间:2018-01-19 08:35:05

标签: ruby-on-rails csv ransack kaminari

我想在导出为CSV时获取所有过滤后的结果。

我的to_csv工作正常,我怀疑与我的控制器有关。

搜索kaminari,搜索,但似乎甚至导出到csv很少使用ransack。
非常感谢任何帮助。

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;' }

1 个答案:

答案 0 :(得分:2)

您可以使用ransack和kaminari执行此操作,但您需要稍微更新控制器。这是你到目前为止所拥有的:

format.csv { send_data @orders.to_csv, filename: "orders-#{DateTime.now.strftime("%d%m%Y%H%M")}.csv" }

当您的控制器到达此处时,@orders已被搜索过滤,但它也已被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时,所有订单仍然在那里。