ruby-on-rails - ページ - wkhtmltopdf wiki




render_to_stringがパーシャルを見つけられません(PDFKitコントローラーの応答) (2)

Ruby 1.8.7、Rails 3.0.4、PDF Kit 0.5.0

私はjavascriptを無効にできるようにミドルウェアを使用せずにPDFKitでPDFを作成しようとしています(そこにはPDFにあるべき多くの情報を隠すアコーディオンアクションがあります)。 しかし、試してみると、ビュー(show.html.erb)のパーシャルが欠落していると表示されるため失敗します。

{:locale => [:en、:en]、:format => [:pdf]、:Handlers => [:erb、:rjs、:builder、:rxml]}で部分的なプログラム/詳細が欠けている

パーシャルへの参照を削除すれば、うまくいきます。 パーシャルをshow.html.erbと同じディレクトリに配置して試してみたこともありません。 これが私のコントローラのshowアクションのコードです。

respond_to do |format| 
  format.html # show.html.erb 
  format.pdf {
    html = render_to_string(:template => "show.html.erb")
    kit = PDFKit.new(html, :disable_javascript => true )
    send_data(kit.to_pdf, :filename => "test_pdf", :type => "application/pdf", :disposition => 'attachment')
  }
end

これをしてパーシャルを保持する方法はありますか?

編集:今のところ私はこれをやった:

# config/initializers/pdfkit.rb
PDFKit.configure do |config|
  config.default_options = {
    :page_size => 'Legal',
    :print_media_type => true,
    :disable_javascript => true
  }
end

これは私が生成するすべてのPDFに対してJavaScriptをオフにするという欠点がありますが、それは今のところやるでしょう。 render_to_stringを使用してパーシャルを動作させるという元々の質問に対する回答は、依然として高く評価されています。


テンプレートへのフルパスを指定する必要があります。

html = render_to_string(:template => "my_view_folder_name/show.html.erb")

私は今朝この問題に遭遇し、解決策を探している間あなたの質問に出会いました。

コントローラー抽出:

respond_to do |format|
  format.html
  format.pdf {
    html = render_to_string(:layout => false , :action => "constitution.pdf.haml")
    kit = PDFKit.new(html)
    kit.stylesheets << "#{Rails.root}/public/stylesheets/pdf.css"
    send_data(kit.to_pdf, :filename => "#{@organisation_name} Constitution.pdf",
      :type => 'application/pdf', :disposition => 'inline')        
    return
  }
end

constitution.pdf.haml抽出:

=render :partial => 'shared/constitution'

エラー:

Missing partial shared/constitution with {:locale=>[:en, :e   ...

しばらくして私の頭を壁にぶつけた後、私は推測をして、composition.pdf.hamlを次のように変更しました。

=render :partial => 'shared/constitution.html.haml'

私はRailsについて少しだけ知っています。 それは(私の通常のHamlビューとは異なり)本当にPDFKitがファイル拡張子を必要とするということでしょうか? それは私のためにそれを修正しました!





render-to-string