如图,这是我看的一个 railscast-china 的视频,登陆验证一节,请问下为什么 password 和 password=方法会自动调用?password=是一个加密方法。 作者在 rails console 中 User.new(:name, :pass),得到的用法就是自动加密的,为何会调用 password=? 加 self 后应该是成为类方法,java 中的静态方法。这样的说法没错吧!那么不加 self 是叫做对象方法吗?
加self后应该是成为类方法,java中的静态方法。这样的说法没错吧!
对的,是类方法,叫 "class method" 为好。
那么不加self是叫做对象方法吗?
如果一定要说对象方法,那么他是 a = A.new 中的 a 对象。但是在 ruby 里,请叫它实例,instance。
User.create(:login=>"yang", :password=>"111") 这里 password 和 password=() 就是常见的对属性做 get 和 set。 create 方法可以拆解为
user = User.new
user.login = 'a'
user.password = 'a'
user.save
具体见 create 的代码
# File activeresource/lib/active_resource/base.rb, line 745
def create(attributes = {})
self.new(attributes).tap { |resource| resource.save }
end
#3 楼 @flowerwrong 应该是在 create 方法调用的,参数里有 password,会处理到。 rails 有隐含方式的调用,确实容易困惑。
thx all, 我还是喜欢显式调用,@user.password = User.hash_password(pass, salt), def self.hash(pass, salt) end in UserModel.
然后经过查资料,发现有三种方法创建 class method
一.@6 楼的
二.
def self.method_name end
三.
class some; end
def some.method_name end