吸引人的RoR模型

时间:2015-04-01 19:22:26

标签: ruby-on-rails ruby activerecord

我正在努力学习Ruby和RoR。 我对Ruby的魔法感到困惑:)

class User < ActiveRecord::Base
    require 'digest/sha1'
    validates :login, :password, :email, { presence: true }
    validates :login, :email, { uniqueness: true }

    before_save :hash_password

    private def hash_password
        if password_chanched?
            puts @password.class.name
            puts password
            password = 'test_pass'
            puts password

            # @password = Digest::SHA1.hexdigest(password)      it works
        end
    end
end

控制台:

>> t = User.new login: 'Test', email: 'abc@def.ghi', password: 'trololo'
#<User id: nil, login: "Test", password: "trololo", email: "abc@def.ghi", created_at: nil, updated_at: nil>

>> t.save
NilClass
trololo
test_pass
true

>> t.password
"trololo"

所以我的问题是:

密码返回什么?我有什么要在回调中修改的?

实际上,这个before_validation回调工作正常:

def downcase_login_and_email
    login.downcase!
    email.downcase!
end

1 个答案:

答案 0 :(得分:0)

我认为当我写作

  

password ='test_pass'

我不使用setter(比如 any_instance.password ='test_pass'),但我创建了一个本地变量 password ,这对类没有任何意义实例

我必须使用 self

    if password_changed?
        puts password # trololo
        self.password = 'test_pass'
        puts password # test_pass
    end

所以我必须阅读更多关于Ruby的内容:)