Ruby on rails 检查nil给出错误
我的控制器中有一行:Ruby on rails 检查nil给出错误,ruby-on-rails,ruby,devise,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。至少调试器是这么说的。我假设您的任何方法都返回一个结果数组,而不是单
user = User.any_of({:user_name => login}, {:email => login})
if user.nil?
# ...
elsif user.legacy_password.nil?
这就产生了这个错误:
undefined method `legacy_password' for []:Array
为什么会发生这种情况?用户对象应该是
nil
。至少调试器是这么说的。我假设您的任何方法都返回一个结果数组,而不是单个结果。您可能需要将.first
添加到它的末尾,这将为您提供一个用户记录,或者nil
如果中的任何一个返回空数组
user = User.any_of({:user_name => login},{:email => login}).first
我假设您的任何方法返回一个结果数组,而不是单个结果。您可能需要将.first
添加到它的末尾,这将为您提供一个用户记录,或者nil
如果中的任何一个返回空数组
user = User.any_of({:user_name => login},{:email => login}).first
看起来您正在使用mongoid(#任何
)并返回一个数组
该错误是因为您正在对数组调用旧密码,但我假设它是在用户模型上定义的。看起来您正在使用mongoid(#任何
)并且它正在返回一个数组
错误是因为您正在数组上调用legacy\u password
,但我假设它是在用户模型上定义的。@AndrewMarshall您的意思是什么?抱歉,我对Ruby和Desive有点陌生:)好吧,你有变量user
,你定义它的代码是什么?@AndrewMarshall我明白了,上面有一行:user=user。任何({:user\u name=>login},{:email=>login})你的假设都没有意义。您的逻辑是“这是nil吗?”运行时说“否”,然后您说“好的,在它上面调用legacy\u password
”,运行时说“这个东西,碰巧是一个数组,没有名为legacy\u password
”的方法。您的nil?
调用与您的错误无关。@AndrewMarshall您的意思是什么?抱歉,我对Ruby和Desive有点陌生:)好吧,你有变量user
,你定义它的代码是什么?@AndrewMarshall我明白了,上面有一行:user=user。任何({:user\u name=>login},{:email=>login})你的假设都没有意义。您的逻辑是“这是零吗?”运行时说“否”,然后您说“好的,在上面调用legacy\u password
”,运行时说“这个东西,碰巧是一个数组,没有名为legacy\u password
”的方法。您的nil?
调用与您的错误无关。@DFylan感谢您的帮助!!我需要15个声望点来投票给你,当系统允许时,我会接受答案:)@DFylan谢谢你的帮助!!我需要15个信誉点来投票给你,当系统允许时,我会接受答案:)