Ruby on rails 如何从do块访问实例变量?
以下代码不起作用。它表示nil:NilClass的Ruby on rails 如何从do块访问实例变量?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,以下代码不起作用。它表示nil:NilClass的未定义的方法“table\u name” @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(mem
未定义的方法“table\u name”
@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
这是因为
@members
为零。您做错了
改变这个
@members = Members.all #Wrong
到
请始终记住,型号名称应为单数
这些称为命名约定。有关详细信息,请阅读这些样式指南(并且)这是由于
@members
为零。您做错了
改变这个
@members = Members.all #Wrong
到
请始终记住,型号名称应为单数
这些称为命名约定。有关详细信息,请阅读这些样式指南(并且)我不确定您正在对“表成员列表行”执行什么操作。我不明白。 但在第三行,它应该是
if @members.table_name == "members"
我不确定您正在对“表成员列表行”执行什么操作。我不明白。 但在第三行,它应该是
if @members.table_name == "members"
最有可能的
table
方法是更改上下文,在该上下文中,您不再有权访问@members
实例变量。这可以通过以下示例代码轻松实现:
def do_stuff(&block)
cls = Class.new
cls.instance_eval(&block)
end
@test_var = "test_var"
do_stuff { puts @test_var }
您将不会收到任何结果,因为
@test\u var
在cls
中不存在,很可能表中的方法正在更改上下文,您不再有权访问@members
实例变量。这可以通过以下示例代码轻松实现:
def do_stuff(&block)
cls = Class.new
cls.instance_eval(&block)
end
@test_var = "test_var"
do_stuff { puts @test_var }
您将不会收到任何信息,因为@test\u var
不存在于cls
抱歉,这是问题中的一个错误。在实际代码中,您可以将完整代码发布到该代码段所属的位置吗?这一行@members=Member.all在哪里?在你的成员中?是的。然后它将成员传递给这个类。这段代码使用该数据呈现成员列表。成员数据将到达该类,我很确定,因为列表已呈现。@EApubs好的,您可以同时发布您的成员吗?对不起,这是问题中的一个错误。在实际代码中,您可以将完整代码发布到该代码段所属的位置吗?这一行@members=Member.all在哪里?在你的成员中?是的。然后它将成员传递给这个类。这段代码使用该数据呈现成员列表。成员数据将进入此类,我很确定,因为列表已呈现。@EApubs好的,您可以将您的成员发布到控制器吗?您可以将初始文本放置到控制台,而不是在PDF文件中使用text
,这样您可以查看您有多少成员。但是,我仍然看不到应该在哪里定义表\u name
@members
将只持有一个数组
,该数组不会响应您的表名
,即使它不是nil
。也许你可以添加另一个put@members.count
到member\u list\u行中来帮助调试?也许你可以put
将初始文本放入控制台,而不是在PDF文件中使用text
,这样可以让你看到你有多少成员。但是,我仍然看不到应该在哪里定义表\u name
@members
将只持有一个数组
,该数组不会响应您的表名
,即使它不是nil
。也许你可以添加另一个put@members.count
到member\u list\u rows
中来帮助调试?阅读似乎你是对的。阅读似乎你是对的。