2014-01-15 88 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 =