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
。
我正在尝试使用 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
。