【发布时间】:2009-05-14 14:52:42
【问题描述】:
我试图了解何时使用 self.method_name 与何时使用 Classname.method_name。
在下面的示例中,为什么“before_create”需要引用“User.hash_password”而不是“self.hash_password”或只是“hash_password”?
由于我们已经在 User 类中,我认为 before_create 方法会“知道”“hash_password”是它自己的类的成员,并且不需要任何特殊语法来引用它。
require 'digest/sha1'
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :password
validates_presence_of :name, :password
validates_uniqueness_of :name
def before_create
self.hashed_password = User.hash_password(self.password)
end
def after_create
@password = nil
end
def self.login(name, password)
hashed_password = hash_password(password || "")
self.find(:first, :conditions => ["name = ? and hashed_password = ?", name, hashed_password])
end
def try_to_login
User.login(self.name, self.password)
end
private
def self.hash_password(password)
Digest::SHA1.hexdigest(password)
end
end
【问题讨论】:
标签: ruby