检查nil会出错

时间:2012-04-18 16:38:03

标签: ruby-on-rails ruby devise

我的控制器中有这一行:

user = User.any_of({:user_name => login}, {:email => login})

if user.nil?
  # ...
elsif user.legacy_password.nil? 

它会产生此错误:

undefined method `legacy_password' for []:Array

为什么会这样?用户对象应该是nil。至少这是调试器所说的。

2 个答案:

答案 0 :(得分:3)

我假设您的any_of方法返回结果数组,而不是单个结果。您可能希望在其末尾添加.first,这将为您提供用户记录,如果nil返回空数组,则为any_of

user = User.any_of({:user_name => login},{:email => login}).first

答案 1 :(得分:1)

看起来你正在使用mongoid(#any_of)并且它正在返回一个数组。

错误是因为您在数组上调用legacy_password,但我认为它是在用户模型上定义的。