thinreportsのリスト機能の使い方が分かりません。
解決したいこと
伝票作成アプリの実装をしています。
現在Thinreportsを使った複数のデータ出力機能を実装中ですが、
データの埋め込み方法が考えつきません。
発生している問題・エラー
まず、アプリに関するデータの流れですが、
以下の画像のように、作成した伝票を保存する際、
「出荷先」、「出荷日」、「伝票番号」、「送り状ナンバー」の4情報は「slipsテーブル」に保存します。
また、下の商品登録欄に入力した商品情報は「ordersテーブル」に一括保存されるようにしています。
slipモデルとorderモデルに1対多のアソシエーションを組んであります。
app/models/slip.rb
class Slip < ApplicationRecord
with_options presence: true do
validates :address_name
validates :shipping_date
validates :slip_number, length: { maximum: 11 }
end
validates :invoice_number, length: { maximum: 11 }
has_many :orders, dependent: :destroy
accepts_nested_attributes_for :orders, allow_destroy: true
end
app/models/order.rb
class Order < ApplicationRecord
validates :note, length: { maximum: 50 }
belongs_to :slip
end
伝票を保存する機能はうまくいっているため、
あとはこれをPDFとして画面出力する機能だけなのですが、
Thinreportsを用いて「リスト機能」を使えばよいというところまでは考えが至っているのですが、
具体的な実装方法が分かりません。
自分で試したこと
②Editorにidとして指定してある部分にデータを入れ込む記述をテキストエディタ上で行いました。
(伝票情報の入っている@slipというインスタンスを使用するために、slipsコントローラーにoutputアクションを定義してあります。)
app/controllers/slips_controller.rb
def output
report = Thinreports::Report.new(layout: "#{Rails.root}/app/pdfs/easy_slips.tlf")
# 少なくとも1枚はページがないと破損したPDF扱いになるので適当に作っておく
report.start_new_page
report.page.item(:address_name).value(@slip.address_name)
report.page.item(:company).value(current_user.name)
report.page.item(:shipping_date).value(@slip.shipping_date)
report.page.item(:slip_number).value(@slip.slip_number)
report.page.item(:invoice_number).value(@slip.invoice_number)
file = report.generate
send_data(
file,
filename: "easy_slips.pdf",
type: "application/pdf",
disposition: "inline")
end
③ここから登録商品のデータを埋め込むために
1.伝票(slip)に紐づく商品を一つ一つ取り出す処理をする。(eachメソッドを使い、@slip.ordersのような記述で取り出す?)
2.その商品データをeditorに埋め込む記述を書く。(list機能を使う?)
https://github.com/thinreports/thinreports-generator/blob/main/README.md#list
と、このように理論はわかるのですが、実践方法が思いつきません。
どなたかアドバイスいただけないでしょうか?