Контроллеры Rails, которые наследуются от ActionController::API
, не имеют возможности render
просмотра или использования помощников вида, что необходимо для многих WickedPdf
вариантов использования.
Вы можете либо переместитьСоздайте действие PDF для другого не-API-контроллера Rails, который вместо этого наследует от ActionController::Base
, или создайте его в своем действии следующим образом:
def print_monthly_trips
pdf_html = ActionController::Base.new.render_to_string(template: 'trips/report.html.erb', layout: 'pdf.html')
pdf = WickedPdf.new.pdf_from_string(pdf_html)
send_data pdf, filename: 'file_name.pdf'
end
Если вы не хотите нести накладные расходы на создание экземпляра ActionController::Base
просто для того, чтобы сгенерировать PDF, вам может потребоваться внести некоторые изменения в свой шаблон и создать HTML-код непосредственно с помощью ERB или Erubis, например:
def print_monthly_trips
layout = Erubis::Eruby.new(File.read(Rails.root.join('app/views/layouts/pdf.html.erb')))
body = Erubis::Eruby.new(File.read(Rails.root.join('app/views/trips/report.html.erb')))
body_html = body.result(binding)
pdf_html = layout.result(body: body_html) # replace `yield` in layout with `body`
pdf = WickedPdf.new.pdf_from_string(pdf_html)
send_data pdf, filename: 'file_name.pdf'
end
Но имейте в виду, что у вас не будет доступа кпросматривать помощников, и большинство wicked_pdf_asset
помощников таким образом.