首页 > 解决方案 > Rails Wicked PDF - 如何在保存记录后下载 pdf 文件并像往常一样继续重定向?

问题描述

我有一个表单,我想强制用户使用该新记录的wicked_pdf gem 下载 pdf 文件/版本,其中包含一些带有提交按钮的内容Save and Download。目前,一旦用户单击Save and Download,文件就会下载,但页面静止不动,不会像往常一样重定向到其显示页面。由于下面的代码示例,我现在应该是这样的。然而,我不知道如何实现我想要的,保存 -> 下载 PDF -> 重定向,或者可以保存 -> 重定向 -> 下载 PDF。

假设我有orders_controller.rb以下内容actions

def create
  @order = Order.new(order_params)
  if @order.save
    redirect_to order_path(@order, format: :pdf)
  else
    render :new
  end
end

def show
  respond_to do |format|
    format.html do
      @order = Order.find(params[:id])
    end
    format.pdf do
      render  pdf:      'New Order',
              template: 'orders/show.pdf.haml',
              page_size: 'A4',
              layout:   'pdf_design.haml',
              disposition: 'attachment'
    end
  end
end

标签: ruby-on-railsruby-on-rails-4wicked-pdf

解决方案


使用下面的代码并将您的实例变量传递给locals.

ac = ActionController::Base.new()
pdf_string = ac.render_to_string pdf: 'New Order', template: 'orders/show.pdf.haml', encoding: "UTF-8", locals: {order: @order}

调整您的视图以便将您的本地分配给order视图实例变量或直接使用order

然后像这样分配文件:

file = StringIO.new(pdf_string)

然后用任何宝石(回形针,Carrierwave ...)上传它


推荐阅读