@midorinokigi (三浦 昭臣)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Rails6 Prawnでデータをpdfに表示するにはどうしたらよいのでしょうか

解決したいこと

Prawnを使って、Railsにおいてpdfを作成したいと考えています。
pdfは、「Rails5でPrawnによるPDFを作成する」(https://qiita.com/yacci/items/61a26ddd3f6eb2494121)
を参考にして、表示されるようになったのですが、
インスタンスの利用
コントローラで渡して入れば、データベースから取得したデータをPDF内で利用可能
を参考に、データを pdfにうめこみたいのですがうまくいきません。
アドバイスをお願いします。

発生している問題・エラー

image.png

該当するソースコード

index8.html.erb

<div class="table-ichi">
            <% @cdir.each do |cdir| %>
                <tr>
                <td><%= link_to(cdir.id,"/cdirs/#{cdir.id}") %></td>
                    <td><%= cdir.no %></td>
                    <td><%= cdir.name %></td>
                    <td><%= cdir.age %></td>
                    <td><%= cdir.a_zaiseki %></td>
                    <td><%= cdir.b_houzin %></td>
                    <td><%= cdir.haizoku %></td>
                    <td><%= cdir.syokusyu %></td>
                    <td><%= cdir.birth %></td>
                    <td><%= cdir.hire_date %></td>
                    <td><%= cdir.reti_date %></td>
                    <td><%= link_to("pdf","/cdirs/#{cdir.id}/pdf") %></td>
                </tr>
            <% end %>
        </div>

routes.rb

  get "cdirs/:id/pdf"=>"cdirs#pdf"

cdirs_controller.rb

class CdirsController < ApplicationController
   def pdf
    @cdirs = Cdir.find(params[:id])
    respond_to do |format|
      format.html
      format.pdf do
        # pdfを新規作成。インスタンスを渡す。
        pdf = RecordPdf.new(@cdirs)
        send_data pdf.render,
          filename:    "order_#{@cdirs.no}",
          type:        "application/pdf",
          disposition: "inline" # 画面に表示。外すとダウンロードされる。
      end
    end
  end
end

pdf.html.erb

  <div class="main user-show"> 
    <div class="container"> 
        <div class="user"> 

        <h2><%= @cdirs.name %></h2> 
        <p><%= @cdirs.no %></p> 
        <p><%= @cdirs.age %></p> 

        <%= link_to "PDF2を表示", record_pdfs_index_path(format: "pdf") %>

        </div> 
    </div> 
</div>

record_pdf.rb

  class RecordPdf < Prawn::Document
    # recordにモデルなどのデータを渡します
    def initialize(cdirs)   # 受け取ったものがcdirsに入っている   
      # superで初期設定を指定します(ページサイズ、マージン等)
      super(
        page_size: 'A4',
        top_margin: 40,
        bottom_margin: 30,
        left_margin: 20,
        right_margin: 20
      )    
      @cdirs=cdirs # メソッドで利用できるようにインスタンス化
          #日本語のフォント
         font "vendor/assets/fonts/ipaexm.ttf"         
 # きちんと日本語も表示されるか確認
        text 'hello こんにちは 春夏秋冬'

        name      
    end

    def name
      text "僕は#{@cdirs.name}です"
    end
#途中省略
end

自分で試したこと

record_pdf.rbにおいて、「text "僕は#{@cdirs.name}です"」 の記述を、「text "僕はです"」 に変えると、pdfは表示されるのですが、「#{@cdirs.name}」を記述すると、上記のエラーが発生します。
pdf.html.erbは、きちんと表示されており、なぜ、record_pdf.rbに データが渡されないか分かりません。ご指導よろしくお願いいたします。

0 likes

3Answer

This answer has been deleted for violation of our Terms of Service.

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌