Rails4:PDFKit缺少模板错误

时间:2016-09-11 00:33:29

标签: ruby-on-rails ruby-on-rails-4 pdf pdfkit

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

单击链接时显示以下错误。

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"

时间表\ 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相同,但结果却相同。

2 个答案:

答案 0 :(得分:1)

您获得Missing template /show的原因是因为使用template: "show"的控制器不足以让rails知道您的views文件夹中的哪个位置可以找到show文件。

您可以在错误中看到此处的证据,表明它在show内搜索了../app/views。您需要使用模板父文件夹以及模板名称。

更改此

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

到这个

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

答案 1 :(得分:0)

只需更改:action =&gt; &#34; show.html.erb&#34;

html = render_to_string(:layout =&gt; false,:action =&gt;&#34; show.pdf.erb&#34;)

希望这会对你有所帮助。