5

私はこのようなコントローラーを持っています:

def show
    @professor = Professor.find(params[:id])
    respond_to do |format|
      format.html
      format.pdf do
        render :pdf => "file_name"
      end
    end
  end

そして、このような単純なビュー:

<p>Professor: <%= @professor.first_name %></p>
<p>Email: <%= @professor.email if @professor.email %></p>

レイアウト'application.html.erb'もあります。

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= content_for?(:title) ? yield(:title) : "Myapp" %></title>
    <meta name="description" content="">
    <meta name="author" content="">
    <%= stylesheet_link_tag    "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
    <%= yield(:head) %>
  </head>
  <body>
    <header class="navbar navbar-fixed-top">
      <nav class="navbar-inner">
        <div class="container">
          <%= render 'layouts/navigation' %>
        </div>
      </nav>
    </header>
    <div id="main" role="main">
      <div class="container">
        <div class="content">
           <div class="row">
            <div class="span12">
              <%= render 'layouts/messages' %>
              <%= yield %>
            </div>
          </div>
          <footer>
          </footer>
        </div>
      </div> <!--! end of .container -->
    </div> 

次のコマンドを実行すると、次のようになります。

bundle exec wkhtmltopdf 'http://local.myapp.com:3000/professors/2' - > test.pdf

すべてのスタイルとレイアウトが適切に記載されたPDFを取得します。

ただし、に行くと、http://local.myapp.com:3000/professors/2.pdf次のようなエラーが発生します。

Missing template professors/show with {:locale=>[:en], :formats=>[:pdf], :handlers=>[:erb, :builder, :coffee]}

そこで、controller#showアクションを次のように変更しました。

def show
    @professor = Professor.find(params[:id])
    respond_to do |format|
      format.html
      format.pdf do
        render :pdf => "file_name",
    :template => 'professors/show.html.erb'
      end
    end
  end

これはビューをレンダリングするのに役立ちますが、残念ながらスタイルとレイアウトはレンダリングされません。私の質問は次のとおりです。

  1. テンプレートを指定する必要があるのはなぜですか?
  2. レイアウトがPDFでレンダリングされないのはなぜですか?
4

1 に答える 1

10

ビューの名前を show.pdf.html.erb に変更するか、新しい show.pdf.erb を作成する必要があります。

ファイル名の .pdf により、ハンドラーはそれを使用できることを認識できます。

また、スタイルを表示するには、おそらく wicked_pdf_stylesheet_link_tag ヘルパーを使用する必要があります。二重目的のビューが必要な場合は、次のようなものが必要になる場合があります。

<% if params[:format] && params[:format] == 'pdf' %>
  <%= wicked_pdf_stylesheet_link_tag 'application' %>
<% else %>
  <%= stylesheet_link_tag 'application' %>
<% end %>
于 2012-06-09T02:11:45.563 に答える