nil的未定义方法`location':NilClass

时间:2013-11-18 15:12:18

标签: ruby-on-rails ruby

当我尝试访问配置文件模型的location属性时出现错误。 它出现在以下代码行中,用于显示过滤搜索结果的链接:

<%= link_to_unless_current Profile.find_by_location(facet['term']).location, params.merge(location: facet['term']) %>

如果我改变:

Profile.find_by_location(facet['term']).location

为:

Profile.find_by_location(facet['term'])

错误消失,链接正确显示并过滤搜索结果,但格式为:

链接:/users?location=canada而不只是链接:canada

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

引发错误是因为可能存在查询

的情况
Profile.find_by_location(facet['term'])

不返回任何结果(nil),您无法在nil实例上调用方法location

如果您不希望查询返回nil结果,请检查数据库的完整性。如果你期待它,那就处理它。

一种可能性是使用try作为快捷方式。

Profile.find_by_location(facet['term']).try(:location)

但它很快就会成为一种坏习惯,所以除非你知道自己在做什么,否则不要这样做。你应该处理用户输入。