我想生成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
相同,但结果却相同。
答案 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;)
希望这会对你有所帮助。