Ruby on rails 我在虾上分好几行

Ruby on rails 我在虾上分好几行,ruby-on-rails,ruby,pdf,prawn,Ruby On Rails,Ruby,Pdf,Prawn,我想创建多行,从prawn pdf上的orderid生成多个医嘱行,但只填充医嘱行的一行 class OrderPdf < Prawn::Document def initialize(order, view) super(top_margin: 70) @order = order @view = view order_id products end def logo image_path = "#{Rails.r

我想创建多行,从prawn pdf上的orderid生成多个医嘱行,但只填充医嘱行的一行

class OrderPdf < Prawn::Document

  def initialize(order, view)
    super(top_margin: 70)
    @order = order
    @view = view

     order_id
     products

  end

  def logo
    image_path =  "#{Rails.root}/app/assets/images/logo.jpg"

  end

  def order_id

    text "Invoice", size: 30, style: :bold, :align => :right

    font("Helvetica", :size => 11, style: :bold) do
      text "14077 Westheimer Rd"
      text "Houston, TX, 77077"
      text "Phone: 281-258-4940"
      text "Fax: 281-258-4947"
      text "AlphaOmegaFurniture.com"

      move_up 40

    text "INVOICE NO.   ##{@order.id}", :align => :right
    text "DATE:   #{@order.OrderDate}", :align => :right
    text  "CUSTOMER ID:   #{@order.Customer_id}", :align => :right

      move_down 40
      font_size 12
        text "To:    #{@order.Customer.fullName}"
        text "Phone: #{@order.ShipToPhone}"


      move_up 30
      font_size 12


      text "Ship To:    Name:        #{@order.Customer.fullName}", :indent_paragraphs => 200
      text "Address:   #{@order.ShipToAddress}", :indent_paragraphs => 260
      text "              #{@order.ShipToCity}, #{@order.ShipToState}, #{@order.ShipToZip}", :indent_paragraphs => 325
      text "Phone:       #{@order.ShipToPhone}", :indent_paragraphs => 260


  end

    move_down 20
    font_size 8

      data =[["SALES PERSON", "JOB", "SHIPPING METHOD", "SHIPPING TERMS", "DELIVERY DATE", "PAYMENT TERMS", "DUE DATE" ],
              ["#{@order.Employee.fullName}", "", "", "", "#{@order.EstimatedDeliveryDate}", "", "#{@order.OrderDate}"]

            ]
               table(data, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"] ) do
                row(0).font_style = :bold

               end



    move_down 20
    font_size 8

    def products
      data =["PROVIDER", "QTY", "ITEM #", "DESCRIPTION", "UNIT PRICE", "DISCOUNT", "LINE TOTAL" ]

data2 = data

             OrderLine.all.each  do |orderline|


            data2 = ["", "", "#{orderline.Product_id}", "#{orderline.Order_id}", "#{orderline.Quantity}", "", ""]


             end

      data3 = [data,data2]
      table(data3, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"], :column_widths => [60,60,60,180,60,60,60] )



end
      end
    end


class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]

  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all
  end

  # GET /orders/1
  # GET /orders/1.json
  def show

    @order = Order.find(params[:id])
    respond_to do |format|
      format.html
      format.pdf do
        pdf = OrderPdf.new(@order, view_context)

        send_data pdf.render, filename: "order_#{@order_id}.pdf",
                  type: "application/pdf",
                  disposition: "inline"

      end
    end
  end
classorderpdf:right
字体(“Helvetica”,:size=>11,style::bold)do
文本“威斯特海默路14077号”
文本“德克萨斯州休斯顿,77077”
文本“电话:281-258-4940”
文本“传真:281-258-4947”
文本“AlphaOmegaFurniture.com”
上移40
文本“发票编号##{@order.id}”,:align=>:right
文本“日期:{@order.OrderDate}”,:align=>:right
文本“客户ID:#{@order.CUSTOMER_ID}”,:align=>:right
下移40
字体大小12
文本“收件人:{@order.Customer.fullName}”
文本“电话:{@order.ShipToPhone}”
上移30
字体大小12
文本“发货地点:名称:{@order.Customer.fullName}”,缩进段落=>200
文本“地址:{@order.ShipToAddress}”,缩进段落=>260
文本“#{@order.ShipToCity},#{@order.ShipToState},#{@order.shiptosip}”,缩进段落=>325
文本“电话:{@order.ShipToPhone}”,缩进段落=>260
终止
下移20
字体大小8
数据=[[“销售人员”、“工作”、“装运方式”、“装运条款”、“交货日期”、“付款条款”、“到期日期”],
[“{@order.Employee.fullName}”,“,”,“,”,“{@order.EstimatedDeliveryDate},”,“{@order.OrderDate}”]
]
表(数据:位置=>:left,:行颜色=>[“F0F0F0”,“FFFFCC”])do
第(0)行。字体样式=:粗体
终止
下移20
字体大小8
def产品
数据=[“供应商”、“数量”、“项目”、“说明”、“单价”、“折扣”、“行总数”]
数据2=数据
OrderLine.all.each do | OrderLine|
数据2=[“”,“”,“#{orderline.Product_id}”、“#{orderline.Order_id}”、“#{orderline.Quantity}”、“”、“”]
终止
数据3=[数据,数据2]
表(数据3,:位置=>:左,:行颜色=>[“F0F0”,“FFFFCC”],:列宽度=>[60,60,60180,60,60,60])
终止
终止
终止
类OrdersController<应用程序控制器
在\u操作之前:设置\u顺序,仅:[:显示,:编辑,:更新,:销毁]
#获取/订购
#GET/orders.json
def索引
@订单=Order.all
终止
#获取/订单/1
#GET/orders/1.json
def秀
@order=order.find(参数[:id])
回应待办事项|格式|
format.html
format.pdf do
pdf=OrderPdf.new(@order,view\u context)
send_data pdf.render,文件名:“order#{@order_id}.pdf”,
键入:“application/pdf”,
处置:“内联”
终止
终止
终止
这里有一些评论:

1.u最好将订单与多个订单行联系起来。并从订单父级获取订单行数组,因为您将始终打印所有订单的所有订单行

例如:@order.lines

2.uu就像你写每个循环一样,它总是用最后一个值覆盖数据2。最好使用这样的方式:

@table_data ||= OrderLine.all.map { |orderline| ["", "", "#{orderline.Product_id}", "#{orderline.Order_id}", "#{orderline.Quantity}", "", ""] }
def products
 data =["PROVIDER", "QTY", "ITEM #", "DESCRIPTION", "UNIT PRICE", "DISCOUNT", "LINE TOTAL" ]
 table_data ||= OrderLine.all.map { |orderline| ["", "", "#{orderline.Product_id}", "#{orderline.Order_id}", "#{orderline.Quantity}", "", ""] }
 table(data, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"], :column_widths => [60,60,60,180,60,60,60] )
 table(table_data, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"], :column_widths => [60,60,60,180,60,60,60] )
end
方法产品可能与以下内容一起工作:

@table_data ||= OrderLine.all.map { |orderline| ["", "", "#{orderline.Product_id}", "#{orderline.Order_id}", "#{orderline.Quantity}", "", ""] }
def products
 data =["PROVIDER", "QTY", "ITEM #", "DESCRIPTION", "UNIT PRICE", "DISCOUNT", "LINE TOTAL" ]
 table_data ||= OrderLine.all.map { |orderline| ["", "", "#{orderline.Product_id}", "#{orderline.Order_id}", "#{orderline.Quantity}", "", ""] }
 table(data, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"], :column_widths => [60,60,60,180,60,60,60] )
 table(table_data, :position => :left, :row_colors => ["F0F0F0", "FFFFCC"], :column_widths => [60,60,60,180,60,60,60] )
end
我还没有测试过。但你可能有这个想法