2014-01-15 2 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- рельсы-ActiveRecord –

ответ

3

Ruby не позволяет использовать неявный self. с типом метода person=.
Это потому, что он считает, что вы устанавливаете локальную переменную. Поэтому он не полагается на себя.

Необходимо указать self.password =.

Смежные вопросы