我有一个具有身份验证方法的用户模型。
如果我在rails控制台中使用模型进行测试可以创建一个用户就好了,然后我可以在电子邮件上查找并完全返回用户。
user = User.find_by_email("someaddress@email.com")
现在,如果我尝试像这样调用身份验证方法并返回用户,那么我的身份验证方法中的puts user语句将返回nil
user = User.authenticate("someaddress@email.com", "foobar")
该模型看起来像这样
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :first_name, :last_name,
:email, :birth_date, :sex,
:password, :password_confirmation
def self.authenticate(email, submitted_password)
user = find_by_email(email)
puts user #this returns nil so my class is never able to authenticate the user
return nil if user.nil?
return user if user.has_password?(submitted_password)
end
end
我对此问题感到茫然。看到这个问题的一些人将非常感激。
答案 0 :(得分:2)
你在Class方法中使用find_by方法的方法很好;应该工作。
你确定nil输出是来自put吗? nil可能是你方法的输出。 user.has_password?
可能存在错误。
而不是puts
,请尝试:
p user
......只是为了确定。
答案 1 :(得分:0)
在调用find_by_email之前,您是否检查了电子邮件的值?也许它的空间不足,所以请检查sql日志并将其复制到dbconsole。
答案 2 :(得分:0)
如果符合以下情况,此方法将返回nil
:
find_by_email
在控制台中工作)has_password?
返回false
,那很可能。检查您的has_password?
方法做得对不对。
答案 3 :(得分:0)
我找到了答案的人......非常感谢您跳槽并建议解决方案。
我有另一种方法,我没有包含在上面的代码中,这是“真正的”问题。
至于我原来的问题,事实证明该方法正在发挥作用。我在传递给方法的字符串中输入了拼写错误。基本上我在电子邮件的末尾留下了“.com”。
通常一个简单的拼写错误让我觉得发布这个问题真的很愚蠢,但考虑到所有问题,看着你的建议让我找到了解决方案,所以非常感谢。