2012-04-18 67 views
1

我有这条线在我的控制器:检查零给出错误

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

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

而且它创建了一个错误:

undefined method `legacy_password' for []:Array 

为什么会出现这种情况?用户对象应该是nil。至少这是调试器说的。

+0

你是如何设置'user'的? – 2012-04-18 16:40:40

+0

@AndrewMarshall你是什么意思?对不起,我对Ruby和Devise有点新鲜:) – Awesomeness 2012-04-18 16:42:54

+0

那么,你有变量'user',你定义它的代码是什么? – 2012-04-18 16:43:51

回答

3

我假设你的any_of方法返回结果数组,而不是单个结果。您可能需要在其末尾添加.first,这会给您一个用户记录,或者如果any_of返回一个空数组,则会返回nil

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

@DFylan谢谢你的帮助!我需要15个声望点来投票给你,并在系统允许我时接受答案:) – Awesomeness 2012-04-18 16:49:21

1

看起来你使用的是mongoid(#any_of),它返回一个数组。

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