以下代碼不起作用。它說undefined method 'table_name' for nil:NilClass
如何從do塊訪問實例變量?
@members = Members.all
table member_list_rows do
if @members.table_name == members
row(0).background_color = '3498db'
end
end
的完整代碼
class MemberPdf < Prawn::Document
def initialize(members, view, allcount)
super(top_margin: 50)
if members.size != allcount
@warn = " (Not all members)"
else
@all = " All"
end
text "Showing#{@all} #{members.size} Members", size: 18, style: :bold, align: :center, color: "636363"
text "#{@warn}", size: 11, align: :center, color: "858585"
@members = members
@view = view
member_list
end
def member_list
move_down 20
table member_list_rows do
self.row(0).align = :center
if @members.table_name == "members"
row(0).background_color = '3498db'
else
end
row(0).text_color = "FFFFFF"
self.row_colors = ["DDDDDD", "FFFFFF"]
self.header = true
#self.cell.text_color = "B3B3B3"
row(0).columns(0).style size: 20
end
end
def member_list_rows
[["Name", "Awardunit", "Address", "Contact", "Level of Entry", "Current Award", "Disabled?" ]] +
@members.map do |member|
[member.name, member.awardunit.name, member.address, member.name, member.entrylvl, member.currentaward, @view.yesno(member.disabled)]
end
end
end
成員控制器
if params[:commit] == "Clear"
params[:q] = nil
end
respond_to do |format|
format.html
format.pdf do
pdf = MemberPdf.new(Member.search(params[:q]).result.order('name ASC'), view_context, Member.all.size)
send_data pdf.render, filename: "Members_List.pdf", type: "application/pdf", disposition: "inline"
end
end
也許你可以把初始文本放到控制檯上,而不是在你的PDF文件中使用'text',這可能會讓你看到你有多少成員。但是,我仍然無法看到'table_name'應該在哪裏定義。 '@ members'將會持有一個'Array',即使它不是'nil',它也不會回答你的'table_name'。也許你可以在'member_list_rows'中添加另一個'puts @ members.count'來幫助調試? – Patru