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
我想生成 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