这可能看起来很简单,但我有点困惑
这里有一些简单的身份验证代码:
def self.authenticate(username="", password="")
user = AdminUser.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
def password_match? (password)
hashed_password == AdminUser.hash_with_salt(password, salt)
end
我的问题是,在def password_match?中?,它如何访问用户对象内部的内容?因为用户调用它?那么,如果它说的是"hashed_pwd"而不是"hashed_password",那就行不通了?
您缺少它所属的周围类。它可能属于User类:
类用户def self.authenticate(用户名=",密码=")user=AdminUser.find_by_username(用户名)如果用户&&user.password_match?(密码)返回用户其他的return false终止终止是否定义密码匹配?(密码)hashed_password==AdminUser.hash_with_salt(密码,salt)终止终止
是的,它是该类上的一个方法。
user=user.authenticate("joe","12345")user.password_match?("12345")
注意一个是如何在类中调用的,一个是在从该类实例化的对象上调用的。
正如Paul提到的,这是self.hashed_password
的快捷方式。。。但使用该快捷方式时可能会遇到麻烦,尤其是在指定快捷方式时-hashed_password = "..."
在这种情况下,ruby可能不知道它是一个方法还是一个变量,它可能会将值分配给一个局部变量,而不是像您所期望的那样调用hashed_password=()
方法。指定属性时始终使用self.hashed_password=()
。:)
是的,你基本上是对的,因为这实际上只是的缩写
self.hashed_password == hashed_password == Admin....
所以其他任何东西都不能工作