在rails 5.2.4中,我试图在后台(在作业中)生成一个pdf,然后将它附加到模型中,如下所示:
pdf_contents = ApplicationController.render(
pdf: "name",
template: 'mytemplate.html.erb',
layout: 'pdf_layout.html',
disposition: 'attachment'
)
@user.attach(io: StringIO.new(pdf_contents), filename: "file.pdf", content_type: "application/pdf")但我得到了:
WARN: ActionView::Template::Error: private method `format' called for nil:NilClass使用
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'发布于 2022-11-18 04:59:20
下面的解决方案适用于我的情况。
# frozen_string_literal: true
class OrderPdfJob < ApplicationJob
queue_as :default
def perform(order_id)
order = Order.find(order_id)
# include helpers
action_controller = ActionController::Base.new
action_controller.view_context_class.include(ActionView::Helpers, ApplicationHelper)
pdf = WickedPdf.new.pdf_from_string(
action_controller.render_to_string(
"order_pdf/summary", layout: 'pdf', locals: { order: order }
)
)
# in your order model should have 'has_one_attached :summary'
order.summary.attach(
io: StringIO.new(pdf),
filename: "#{order.id}.pdf",
content_type: 'application/pdf'
)
order.save!
end
endhttps://stackoverflow.com/questions/66047467
复制相似问题