Скачать несколько PDF, используя Wicked PDF

Как я могу загрузить несколько PDF с использованием Wicked-PDF

Ниже приведена строка кода, которую я использую здесь,

@awb_orders = Spree::Order.where('created_at >= ? AND created_at <= ?', DateTime.now-1.month, DateTime.now).where(:state => 'complete').order("created_at DESC")
@awb_orders.each do |order|
  @order = order
  respond_to do |format|
    format.html
    format.pdf do
      render pdf: "file_name_#{DateTime.now}",
        save_to_file: Rails.root.join('public', "invoice_#{DateTime.now}.pdf")
     end
   end
 end

Я получаю следующий результат

Рендеринг и / или перенаправление вызывались несколько раз в этом действии...... "redirect_to(...) and return".

Может кто-нибудь помочь мне, где я иду не так?

1 ответ

В обычном контроллере Rails вы не можете вызвать render метод более одного раза, и здесь вы делаете это для столько заказов, сколько у вас есть.

Вместо этого, я думаю, вы захотите либо реорганизовать свои данные так, чтобы все счета-фактуры были сгенерированы в одном шаблоне PDF, либо вы сгенерировали отдельные PDF-файлы вне цикла response_to / render, а затем слили их вместе в один PDF или ZIP-файл, содержащий их все.

Вот примерный план того, как это может выглядеть:

@awb_orders = Spree::Order.where('created_at >= ? AND created_at <= ?', DateTime.now-1.month, DateTime.now).where(:state => 'complete').order("created_at DESC")
respond_to do |format|
  format.html
  format.pdf do
    cpdf = CombinePDF.new
    @awb_orders.each do |order|
      pdfdata = render_to_string(pdf: "order_#{order.id}"
      cpdf << CombinePDF.parse(pdfdata)
    end
    send_data cpdf.to_pdf, filename: "combined.pdf", type: "application/pdf"
  end
end
Другие вопросы по тегам