Rails4:模板缺少 PDFKit 错误

Rails4: Template is missing error with PDFKit

我想生成 PDF 文件,所以我尝试使用 PDFKit 但失败了。

点击link出现如下错误。

ActionView::MissingTemplate (Missing template /show with {:locale=>[:en], :formats=>[:pdf], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
  * "/usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates"
  * "/home/ubuntu/workspace/app/views"
  * "/usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/app/views"

schedules\show.html.erb

<% provide(:title, @schedule.title) %>
<%= render @schedules %>

时间表\ _schedule.html.erb

...
    <%= link_to "PDF", schedule_path(schedule.id, format: "pdf"), class: "btn btn-sm btn-default" %>
...

schedules_controller.rb

...
respond_to do |format|
  format.html # show.html.erb
  format.pdf do
    html = render_to_string template: "show"

    pdf = PDFKit.new(html, encoding: "UTF-8")

    send_data pdf.to_pdf,
      filename:    "#{@scheudles.id}.pdf",
      type:        "application/pdf",
      disposition: "inline"
  end
end
...

虽然我创建的show.pdf.erb_schedule.pdf.erb的内容和html.erb一样,但是结果是一样的

只需更改:action => "show.html.erb"

html = render_to_string(:layout => false , :action => "show.pdf.erb")

希望对您有所帮助。

你得到 Missing template /show 的原因是因为控制器使用 template: "show" 不够具体 rails 无法知道在你的视图文件夹中找到 [=14] =] 文件。

你可以在你的错误中看到这方面的证据,它说它在 ../app/views 中搜索了 show。您需要使用模板父文件夹和模板名称。

改变这个

format.pdf do
  html = render_to_string template: "show"
  ...
end 

到这个

format.pdf do
  html = render_to_string template: "schedules/show.html.erb"
  ...
end