以下第一段代码
foos_set = Foo.where(foo_number: number)
foo = foos_set.first
if foo.project.status == "Ongoing"
#do sth
end
其中foo是一个表,每个foo都有一个名为project的列,它链接到一个项目表。状态是表项目的一列。
现在我想做类似的事情,尝试检查foo->项目的相关项目 - >状态
@foos = Foo.all
@hash = Gmaps4rails.build_markers(@foos) do |foo, marker|
if foo.project.status == "Ongoing"
#do sth
else
#do sth
end
它说foo.project返回nil,因此我无法检查foo.project.status。我的问题是什么?我是否错过了模型或控制器中的某些设置? 我已将工作代码放入第二个控制器,它也会产生错误。所以这是一些配置错误。
答案 0 :(得分:0)
正如@jefflunt在评论中所说,你可能有一些foo
与project
无关,你可能想要参与其中。要查找未附加到项目的任何foo
,您可以在rails控制台中使用以下内容:
Foo.where(project: nil)
如果与foo
没有关联的project
与你可以使用或预期相关,那么你可以做一些事情来解决nil
{1}} project
与foo
相关联。
if foo.project.present? && foo.project.status == "Ongoing"
此行检查foo
是否附加了project
,如果是,请确保project
的状态为"正在进行& #34 ;.更好的是:
if foo.project.try(:status) == "Ongoing"
try
方法返回nil
,而不是抛出错误,如果特定foo
没有project
。