未定义的方法`start_with?'为零:NilClass

时间:2016-02-23 15:17:28

标签: ruby-on-rails wicked-pdf chartkick

chartkickwicked-pdf一起使用。

应用程序/布局/ pdf.html.erb

<!doctype html>
<html>
<head>
 <meta charset='utf-8' />
 <%= wicked_pdf_stylesheet_link_tag 'application', media: 'all' %>
 <%= wicked_pdf_javascript_include_tag 'application', 'data-turbolinks-track' => true %>
 <%= javascript_include_tag "http://www.google.com/jsapi"%>
 <%= wicked_pdf_javascript_include_tag 'chartkick'%>
 </head>
 <body onload='number_pages'>
 <div id="header">
  <h2>Report</h2>
</div>
<div id="content">
  <%= yield %>
</div>

但它在此行上出错了

<%= wicked_pdf_stylesheet_link_tag 'application', media: 'all' %>

错误

  undefined method `start_with?' for nil:NilClass

我如何删除它? 错误

ActionView::Template::Error (undefined method `start_with?' for nil:NilClass):
2: <html>
3:   <head>
4:     <meta charset='utf-8' />
5:     <%= wicked_pdf_stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
6:     <%= wicked_pdf_javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7:     <%= javascript_include_tag "http://www.google.com/jsapi"%>
8:     <%= wicked_pdf_javascript_include_tag 'chartkick'%>
 app/views/layouts/pdf.html.erb:5:in `_app_views_layouts_pdf_html_erb___3130978149028204091_70042742447040'
 app/controllers/campaigns_controller.rb:104:in `block (2 levels) in survey_reporting'
 app/controllers/campaigns_controller.rb:101:in `survey_reporting'

5 个答案:

答案 0 :(得分:3)

我通过创建一个特定的pdf.css.scss文件并导入了我的自定义样式(estilo.css)和font-awesome style来解决了这个问题。

/*# pdf.css.scss 

@import "font-awesome";
@import "estilo";

我无法在那里导入bootstrap.css文件,因为glyphicon的src-url方法。它破了wicked_pdf

作为一种解决方法,我只是复制了bootstrap.css文件中的所有pdf.css.scss文件并删除了所有关于glyphicon的文件,因为我在生成的PDF文件中根本没有使用它。

更新

不要在bootstrap.css文件中复制和粘贴所有pdf.css.scss来源,而是执行此操作:

  1. 请按照以下步骤here;

  2. bootstrap.css中为您config/application.rb文件位置添加一行。它应该是这样的:

    /*# config/application.rb
    
    config.assets.paths << "#{Rails.root}/app/assets/stylesheets/font-awesome-4.2.0/css/" 
    config.assets.paths << "#{Rails.root}/app/assets/stylesheets/bootstrap/" 
    config.assets.paths << "#{Rails.root}/vendor/assets/fonts"
    
  3. 最后在pdf.css.scss文件中添加bootstrap导入。它应该是这样的:

    /*# pdf.css.scss
    
    @import "bootstrap";
    @import "font-awesome";
    @import "estilo";
    
  4. 通过这一切,wicked_pdf读取src-urls方法将起作用!

答案 1 :(得分:2)

问题解决了!

替换

<%= wicked_pdf_stylesheet_link_tag "application" %>

<%= stylesheet_link_tag wicked_pdf_asset_base64("pdf") %>

答案 2 :(得分:1)

我有同样的问题。我的问题是我的application.css.scss包含了Docs npm软件包。该软件包的问题在于资产路径似乎在其中断开,导致箭头不显示。我猜wicked_pdf_stylesheet_link_tag不会忽略它无法像正常的stylesheet_link_tag那样找到资产并导致错误的事实。创建一个专门用于PDF的新css文件并删除lightbox2参考可以解决我们的错误。

答案 3 :(得分:0)

@import "bootstrap-sprockets"之前添加@import "bootstrap"

@import "bootstrap-sprockets"
@import "bootstrap"

选中此link

答案 4 :(得分:0)

要解决此问题, 创建一个文件app / assets / stylesheet / bootstrap.css 然后从任何CDN复制粘贴引导CSS。 现在,将此文件包含在您使用的布局中。 例如:pdf.html.erb

<!DOCTYPE html>
<html>
<head>
  <title>PDF</title>
  <%= stylesheet_link_tag wicked_pdf_asset_base64("bootstrap") %>
</head>
<body>
<div class='container'>
  <%= yield %>
</div>
</body>
</html>

和控制器端的脚本类似:

  def job_invoice_view

    respond_to do |format|
      format.html { render :layout => 'tukaweb' }
      format.pdf do
        render pdf: "Your_filename",
               template: "users/job_invoice_view.html.erb",
               layout: 'pdf',
               viewport_size: '1280x1000'
      end
    end
  end