NoMethodError 在 Rails 4 中使用 Prawn

NoMethodError using Prawn in Rails 4

我正在尝试使用 Prawn 使用 Postgres 数据库中的数据创建 PDF。我创建了一个 class ReportPdf,如下所示,但是当我尝试在 @tables 上调用 .map 时,我得到了一个 NoMethodError。

app/controllers/forms_controller.rb

class FormsController < ApplicationController

def index
    @tables = Table.all
end

def forms

end

def new
    @tables = Table.new

    respond_to do |format|
        format.html
        format.pdf do
            pdf = ReportPdf.new(@tables)
            send_data pdf.render, filename: 'report.pdf', type: 'application/pdf'
        end
    end
end

def create
    @tables = Table.new(tables_params)
    if @tables.save
        redirect_to root_path, notice: "Success"
    else
        redirect_to root_path, alert: "Fail"
    end
end

private
def tables_params
    params.require(:table).permit(:first_name, :middle_name, :last_name)
end

end

app/pdfs/report_pdf.rb

class ReportPdf < Prawn::Document

def initialize(user_data)
  super()
  @tables = user_data
  header
  text_content
  table_content
end

def header
  image "#{Rails.root}/app/assets/images/officestock.jpg", width: 530, height: 150
end

def text_content
y_position = cursor - 50
bounding_box([0, y_position], :width => 270, :height => 300) do
  text "TEXT", size: 15, style: :bold
  text "MORE TEXT"
end

bounding_box([300, y_position], :width => 270, :height => 300) do
  text "TEXT", size: 15, style: :bold
  text "MORE TEXT"
end

end

def table_content
  table product_rows do
    row(0).font_style = :bold
    self.header = true
    self.row_colors = ['DDDDDD', 'FFFFFF']
    self.column_widths = [40, 300, 200]
  end
end

def product_rows
  [['First', 'Middle', 'Last']] +
    @tables.map do |data|
      [data.first_name, data.middle_name, data.last_name]
    end
end
end 

此时,我不确定问题出在哪里。这对我来说似乎很简单,所以我可能会遗漏一些明显的东西。我也安装了大虾-table gem,也没有解决问题

如有任何帮助,我们将不胜感激!

在您分配的 new 操作中:

@tables = Table.new

我想这是一个单独的对象,没有响应 map