在控制器中,我有一个带有show
块的respond_to
方法,可以创建一个wicked_pdf
的PDF,如下所示:
class TimesheetsController < ApplicationController
def show
...
respond_to do |format|
format.html
format.pdf do
render pdf: "pdf",
template: 'timesheets/show.pdf.haml',
print_media_type: true,
orientation: 'Portrait',
page_size: 'A4',
disposition: 'attachment'
end
end
...
end
end
这很好用,但是我想用delayed_job
将它移到后台作业。我已经设置delayed_job
,它运行正常。现在我想使用PdfJob
对象来创建PDF,因此它也可以作为单独的后台作业完成。所以新的respond_to
块看起来像这样:
respond_to do |format|
format.html
format.pdf do
PdfJob.new.create_timesheet(@timesheet)
end
end
PdfJob
看起来像这样:
class PdfJob
def initialize
end
def create_timesheet(timesheet)
av = ActionView::Base.new()
av.view_paths = ActionController::Base.view_paths
av.extend ApplicationHelper
av.render pdf: "Timesheet #{timesheet.user.full_name} #{I18n.t("date.month_names")[timesheet.month]} #{timesheet.year}",
template: 'timesheets/show.pdf.haml',
print_media_type: true,
orientation: 'Portrait',
page_size: 'A4',
disposition: 'attachment'
end
end
它正在调用ActionView::Base
和ActionController::Base
以便能够从对象渲染视图。 PDF的实际渲染没有改变。但是,当我尝试创建PDF时,PDF是内联创建的而不是附件,并且它是完全空的。这可能是什么原因?我忘了什么吗?