我在铁轨上只是练习一些铁轨,遇到了一些我正在尝试理解的东西。红宝石在轨道上做了什么?
我没有得到验证方法的“自我”。所以我删除它和测试我的应用程序的登录,看看它会显示一个错误,它没有:
error:
**NoMethodError in SessionsController#create
undefined method `authenticate' for #<Class:0x00000102cb9000**>
我真的很感激,如果有人能解释什么是“自我”在做什么。我试图弄清楚到底发生了什么,但无法摆脱困境。
方法在模型中定义,并在会话控制器中调用.. 我一直在不断删除我的应用程序,并从头开始获取它的窍门,每次我重新开始时,许多事情对我来说都有意义,但我是卡在“自我”。
我只是喜欢理解为什么有效的人的类型。
控制器:
def create
user = User.authenticate(params[:email], params[:password])
if user
session[:user_id] = user.id
redirect_to root_path, :notice => "Logged In"
else
flash.now.alert = "Invalid credentials"
render "new"
end
end
模型:
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
稍微扩展一下你的答案:'def object.my_foo_method'。在'obj'上定义'my_foo_method'。在你的回答的上下文中,'self'是类'Class'(即类MyClass')的对象。因此,它定义了该类的方法。 – Swanand
不应该在实例中使用“@”符号,例如@instance = ...? –
考虑到它的轨道,并可能会在视图中使用 –