当用户尝试将网格数据加载到表单中时,我的应用似乎随机抛出错误:
ActionView::Template::Error (undefined method `first_name' for nil:NilClass):
3: t = @conts
4: xml.tag!("row",{ "id" => t.id }) do
5:
6: xml.tag!("cell", t.first_name)
7: xml.tag!("cell", t.last_name)
8: xml.tag!("cell", t.email)
9: xml.tag!("cell", t.phone_1)
以下是控制器文件
def compdata
@conts = Continfo.find_by_id(params[:id])
end
通信compdata RXML文件
xml.instruct! :xml, :version=>"1.0"
xml.tag!("rows") do
t = @conts
xml.tag!("row",{ "id" => t.id }) do
xml.tag!("cell", t.first_name)
xml.tag!("cell", t.last_name)
xml.tag!("cell", t.email)
xml.tag!("cell", t.phone_1)
xml.tag!("cell", t.phone_2)
xml.tag!("cell", t.homepage)
xml.tag!("cell", t.skype)
end
end
答案 0 :(得分:0)
现在看起来你还有一些其他类似的问题(here和here),对于当前的一个和这一个,看起来你的@conts
值是目前nil
表示在运行搜索时没有收回任何内容:
def compdata
@conts = Continfo.find_by_id(params[:id])
end
您确定表格中有id
等于params[:id]
的值?
如果那里不匹配,那将是我看的第一个地方。
您尝试在each
上调用@conts
方法时可能会遇到问题,因为find_by_id
方法将不带回数组。如果您希望迭代每条记录而不是每个键/值,请尝试使用find_all_by_id
,它将返回数组。
在查看了您的其他问题之后,看起来您的语法不同,但是您不应该像这样再次迭代@conts
吗?
xml.tag!("rows") do
@conts.each do |t|
xml.tag!("row",{ "id" => t.id }) do
xml.tag!("cell", t.first_name)
xml.tag!("cell", t.last_name)
xml.tag!("cell", t.email)
xml.tag!("cell", t.phone_1)
xml.tag!("cell", t.phone_2)
xml.tag!("cell", t.homepage)
xml.tag!("cell", t.skype)
end
end
end
这是分配t
而非t = @conts
的方式,特别是如果您计划逐步完成其中的许多内容。