2014-01-15 58 views
1

我对Ruby语言和Rails很新。我目前正在建立一些简单的用户注册程序。当我使用这些代码的Rails抛出: 的隐式转换,从零到字符串Ruby(Rails)变量范围

这里是原代码:

require 'digest' 

class User < ActiveRecord::Base 
    before_save :encrypt_password 

    protected 
    def encrypt_password 
    return if password.blank? 
    password = encrypt(password) 
    end 

    def encrypt(string) 
    Digest::SHA1.hexdigest(string) 
    end 
end 

但它的工作原理,如果我改变了这一行password = encrypt(password),以self.password = encrypt(password)。我只是好奇,第一个代码有什么问题?

+0

您还应该阅读http://www.techotopia.com/index.php/Ruby_Variable_Scope – portforwardpodcast

+0

http://stackoverflow.com/questions/5183664/why-isnt-self-always-needed-in-ruby- Rails的ActiveRecord的 –

回答

3

Ruby不允许在person=类型的方法中使用隐式self.
那是因为它认为你正在设置一个局部变量。所以它不依赖于自我。您需要明确指定self.password =