質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

受付中

親要素のIDに紐づく子要素のレコード全てを表示したい

aki_aki
aki_aki

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

2回答

0評価

1クリップ

92閲覧

投稿2022/01/15 08:54

現在、railsでcocoonとprawnを使ってpdfに出力する帳票を作成しています。
入力フォームで登録した値をpdfで表示したいです。
cocoonで動的な入力フォームは完成しており、prawnでpdfの出力はできている状態です。
親要素の値は全て表示できているのですが、その親要素のIDに紐づく複数の子要素の表示がうまくいきません。eachなどで繰り返し処理を試してみたりしましたが、うまくいきません。
何かいい方法があればよろしくお願いします。

エラーメッセージ

該当のソースコード

rails

class CostPdfsController < ApplicationController before_action :set_cost_pdf, only: [:edit, :update, :destroy] before_action :authenticate_user! before_action :move_to_index, only: [:edit] def index @cost_pdfs = CostPdf.where(user_id: current_user.id) @search_cost = CostPdf.ransack(params[:q]) @cost_pdfs = @search_cost.result(distinct: true).order('created_at DESC') end def new @cost_pdf = CostPdf.new @quotation = @cost_pdf.quotations.build end def create @cost_pdf = CostPdf.new(cost_pdf_params) if @cost_pdf.save redirect_to cost_pdfs_path else render :new end end def edit end def update if @cost_pdf.update(cost_pdf_params) redirect_to cost_pdfs_path else render :edit end end def destroy @cost_pdf.destroy redirect_to cost_pdfs_path end def prawn @cost_pdf = CostPdf.find(params[:id]) # binding.pry @quotations = @cost_pdf.quotations.where(cost_pdf_id:params[:id]) respond_to do |format| format.html format.pdf do cost_pdf = PracticePdf::CostPdf.new(@cost_pdf, @quotations) send_data cost_pdf.render, filename: 'cost_pdf.pdf', type: 'application/pdf', disposition: 'inline' end end end private def cost_pdf_params params.require(:cost_pdf).permit(:company_name, :postal_code, :address, :tell, :fax, :delivery_date, :delivery_location, :payment_terms, :expiration_date, :subtotal, :tax, :total, :cliant_name, :memo, quotations_attributes:[:id, :product_name, :quantity, :unit, :unit_price, :money, :remarks, :_destroy]).merge(user_id: current_user.id) end def set_cost_pdf @cost_pdf = CostPdf.find(params[:id]) end def move_to_index unless user_signed_in? && current_user.id == @cost_pdf.user_id redirect_to user_session_path end end end

ruby

module PracticePdf class CostPdf < Prawn::Document def initialize(cost_pdf, quotation) super(page_size: 'A4') stroke_axis ipaexm_path = "#{Rails.root}/app/assets/fonts/ipaexm.ttf" ipapm_spec = {file: ipaexm_path, font: 'IPAPMincho'} font_families.update("ipapm" => {normal: ipapm_spec, bold: ipapm_spec, italic: ipapm_spec, bold_italic: ipapm_spec}) font "ipapm" @cost_pdf = cost_pdf @quotation = quotation create_title end def create_title text '御 見 積 書', size: 20, align: :center stroke_horizontal_line 180, 340, :at=> 750 font_size = 16 move_down 55 text_box("#{Time.now.strftime("%Y年%m月%d日")}", :at => [0, y], :width => bounds.right, :align => :right) bounding_box([70, 680], width: 310, height: 65) do text @cost_pdf.cliant_name, size: 12, align: :left end bounding_box([200, 680], width: 310, height: 65) do text "御中", size: 12, align: :left end bounding_box([33, 650], width: 310, height: 65) do text "下記の通り御見積り申し上げます。", size: 12, align: :left end bounding_box([40, 620], width: 310, height: 65) do text "1.受渡期日 #{@cost_pdf.delivery_date}", size: 12, align: :left end bounding_box([40, 600], width: 310, height: 65) do text "2.納入場所 #{@cost_pdf.delivery_location}", size: 12, align: :left end bounding_box([40, 580], width: 310, height: 65) do text "3.支払条件 #{@cost_pdf.payment_terms}", size: 12, align: :left end bounding_box([40, 560], width: 310, height: 65) do text "4.有効期限 #{@cost_pdf.expiration_date}", size: 12, align: :left end bounding_box([305, 693], width: 310, height: 65) do text "〒#{@cost_pdf.postal_code}", size: 12, align: :left end bounding_box([308, 680], width: 310, height: 65) do text @cost_pdf.address, size: 12, align: :left end bounding_box([308, 665], width: 310, height: 65) do text @cost_pdf.company_name, size: 12, align: :left end bounding_box([308, 648], width: 310, height: 65) do text "TEL#{@cost_pdf.tell}/FAX#{@cost_pdf.fax}", size: 12, align: :left end bounding_box([390,610], :width=>270,:height=>360){ table [ ["検 印","担当者印"] ] } bounding_box([89, 535], width: 310, height: 65) do move_down 10 text "御 見 積 金 額 ", size: 16, align: :left end bounding_box([135, 535], width: 310, height: 65) do move_down 10 text #{@cost_pdf.total.to_s(:delimited)}- (消費税込)", size: 16, align: :right end bounding_box([89, 535], width: 310, height: 65) do move_down 10 @quotation.each do |quotation| text quotation.product_name, size: 16, align: :left end end end bounding_box([6.5, 500], width: 510, height: 65) do rows = [["品 名","数 量","単位","単 価","金 額","備 考"], table(rows, column_widths: [200, 45, 35, 60, 80, 90], position: :center) do |table| table.cells.size = 11 table.row(0).align = :center end bounding_box([120, 135], width: 310, height: 65) do text "小 計", size: 12, align: :left end bounding_box([100, 135], width: 310, height: 65) do text "#{@cost_pdf.subtotal.to_s(:delimited)}", size: 12, align: :right end bounding_box([120, 115], width: 310, height: 65) do text "消 費 税 等 ( 10% )", size: 12, align: :left end bounding_box([100, 115], width: 310, height: 65) do text "#{@cost_pdf.tax.to_s(:delimited)}", size: 12, align: :right end bounding_box([120, 95], width: 310, height: 65) do text "合 計", size: 12, align: :left end bounding_box([100, 95], width: 310, height: 65) do text "#{@cost_pdf.total.to_s(:delimited)}", size: 12, align: :right end bounding_box([10, 75], width: 310, height: 65) do text "備 考:", size: 12, align: :left end bounding_box([10, 63], width: 310, height: 65) do text @cost_pdf.memo, size: 12, align: :left end end end end

rails

<div class="nested-fields"> <div class="form-block" id="form_block[0]"> <div class="row"> <div class="col-md-6 mb-3"> <label for="familyName">品名</label> <%= f.text_field :product_name, class:"form-control", placeholder:"必須" %> <label for="familyName">数量</label> <%= f.text_field :quantity, class:"form-control", placeholder:"任意" %> <label for="givenName">単位</label> <%= f.text_field :unit, class:"form-control", placeholder:"任意" %> </div> <div class="col-md-6 mb-3"> <label for="givenName">単価</label> <%= f.text_field :unit_price, class:"form-control", placeholder:"任意" %> <label for="givenName">金額</label> <%= f.text_field :money, class:"form-control", id:"money-cost[0]", placeholder:"必須" %> <label for="familyName">備考</label> <%= f.text_field :remarks, class:"form-control", placeholder:"任意" %> </div> </div> <%= link_to_remove_association "削除", f %> </div> </div>

試したこと

@quotations = @cost_pdf.quotations.where(cost_pdf_id:params[:id])

ここに値が入っているのは binding.pryで確認できています。

@quotation.each do |quotation|
quotation.product_neme
end
これは間違っているでしょうか?

補足情報(FW/ツールのバージョンなど)

ruby 2.6.5  rails 6.0.0

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。