【问题标题】:Getters in RoR's modelRoR 模型中的吸气剂
【发布时间】:2015-04-01 19:22:25
【问题描述】:

我正在尝试学习 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

【问题讨论】:

  • 不确定我是否理解这个问题,你问的是password 还是回调?
  • 两者:) 对不起我的英语。

标签: ruby-on-rails ruby activerecord


【解决方案1】:

我认为当我写的时候

密码 = '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 的内容:)

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2018-11-16
    • 2018-04-05
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多