2012-04-18 71 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模型上定義的。