新手问题 对于继承了 ActiveRecord::Base 来创建模型的类,想要修改对应字段的 set 和 get 方法

kakaxi2 · 2015年10月05日 · 最后由 chenge 回复于 2015年10月05日 · 1654 次阅读

初学者,想要写一个 model,主要是用来记录用户名和密码,现在的目的是为了给 password 进行 hash 转换,按我的理解 ActiveRecord::Base 是起到了 attr_accessor 的作用,不知道如下的写法是否存在了纰漏?存在问题,可以设置 password,但是 valid 为 false,求解。

class User < ActiveRecord::Base
    validates :name, presence: true
    validates :password, presence: true

    def password
        @password
    end

    def password=(password)
        puts "here"
        return if not password
        password = generatePassword(password)
        super(password)
    end

    private
    def generatePassword(password)
        Digest::SHA256.hexdigest(password)
    end
end

是不是需要换个名字,比如 password_x。不然会取代了原来的,有冲突吧。

#1 楼 @chenge 修改了一下,调用了 super 方法,但是能够设置 password,但是 valid?为 false,无法提交

write_attribute :password, generatePassword(password)

密码 hash 不用自己写 http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

#2 楼 @kakaxi2 另一个方法是不是也要改为 super?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号